github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/client/applicationoffers/conversions.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package applicationoffers
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  
     9  	"github.com/juju/juju/apiserver/params"
    10  	"github.com/juju/juju/environs"
    11  	"github.com/juju/juju/network"
    12  )
    13  
    14  // paramsFromProviderSpaceInfo converts a ProviderSpaceInfo into the
    15  // equivalent params.RemoteSpace.
    16  func paramsFromProviderSpaceInfo(info *environs.ProviderSpaceInfo) params.RemoteSpace {
    17  	result := params.RemoteSpace{
    18  		CloudType:          info.CloudType,
    19  		Name:               info.Name,
    20  		ProviderId:         string(info.ProviderId),
    21  		ProviderAttributes: info.ProviderAttributes,
    22  	}
    23  	for _, subnet := range info.Subnets {
    24  		resultSubnet := params.Subnet{
    25  			CIDR:              subnet.CIDR,
    26  			ProviderId:        string(subnet.ProviderId),
    27  			ProviderNetworkId: string(subnet.ProviderNetworkId),
    28  			ProviderSpaceId:   string(subnet.SpaceProviderId),
    29  			VLANTag:           subnet.VLANTag,
    30  			Zones:             subnet.AvailabilityZones,
    31  		}
    32  		result.Subnets = append(result.Subnets, resultSubnet)
    33  	}
    34  	return result
    35  }
    36  
    37  // providerSpaceInfoFromParams converts a params.RemoteSpace to the
    38  // equivalent ProviderSpaceInfo.
    39  func providerSpaceInfoFromParams(space params.RemoteSpace) *environs.ProviderSpaceInfo {
    40  	result := &environs.ProviderSpaceInfo{
    41  		CloudType:          space.CloudType,
    42  		ProviderAttributes: space.ProviderAttributes,
    43  		SpaceInfo: network.SpaceInfo{
    44  			Name:       space.Name,
    45  			ProviderId: network.Id(space.ProviderId),
    46  		},
    47  	}
    48  	for _, subnet := range space.Subnets {
    49  		resultSubnet := network.SubnetInfo{
    50  			CIDR:              subnet.CIDR,
    51  			ProviderId:        network.Id(subnet.ProviderId),
    52  			ProviderNetworkId: network.Id(subnet.ProviderNetworkId),
    53  			SpaceProviderId:   network.Id(subnet.ProviderSpaceId),
    54  			VLANTag:           subnet.VLANTag,
    55  			AvailabilityZones: subnet.Zones,
    56  		}
    57  		result.Subnets = append(result.Subnets, resultSubnet)
    58  	}
    59  	return result
    60  }
    61  
    62  // spaceInfoFromState converts a state.Space into the equivalent
    63  // network.SpaceInfo.
    64  func spaceInfoFromState(space Space) (*network.SpaceInfo, error) {
    65  	result := &network.SpaceInfo{
    66  		Name:       space.Name(),
    67  		ProviderId: space.ProviderId(),
    68  	}
    69  	subnets, err := space.Subnets()
    70  	if err != nil {
    71  		return nil, errors.Trace(err)
    72  	}
    73  	for _, subnet := range subnets {
    74  		resultSubnet := network.SubnetInfo{
    75  			CIDR:              subnet.CIDR(),
    76  			ProviderId:        subnet.ProviderId(),
    77  			ProviderNetworkId: subnet.ProviderNetworkId(),
    78  			VLANTag:           subnet.VLANTag(),
    79  			AvailabilityZones: subnet.AvailabilityZones(),
    80  		}
    81  		result.Subnets = append(result.Subnets, resultSubnet)
    82  	}
    83  	return result, nil
    84  }