本文整理匯總了Golang中github.com/juju/juju/environs.NetworkingEnviron.Spaces方法的典型用法代碼示例。如果您正苦於以下問題:Golang NetworkingEnviron.Spaces方法的具體用法?Golang NetworkingEnviron.Spaces怎麽用?Golang NetworkingEnviron.Spaces使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/juju/juju/environs.NetworkingEnviron
的用法示例。
在下文中一共展示了NetworkingEnviron.Spaces方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: handleSubnets
func (dw *discoverspacesWorker) handleSubnets(env environs.NetworkingEnviron) error {
ok, err := env.SupportsSpaceDiscovery()
if err != nil {
return errors.Trace(err)
}
if !ok {
// Nothing to do.
return nil
}
providerSpaces, err := env.Spaces()
if err != nil {
return errors.Trace(err)
}
listSpacesResult, err := dw.api.ListSpaces()
if err != nil {
return errors.Trace(err)
}
stateSubnets, err := dw.api.ListSubnets(params.SubnetsFilters{})
if err != nil {
return errors.Trace(err)
}
stateSubnetIds := make(set.Strings)
for _, subnet := range stateSubnets.Results {
stateSubnetIds.Add(subnet.ProviderId)
}
stateSpaceMap := make(map[string]params.ProviderSpace)
spaceNames := make(set.Strings)
for _, space := range listSpacesResult.Results {
stateSpaceMap[space.ProviderId] = space
spaceNames.Add(space.Name)
}
// TODO(mfoord): we need to delete spaces and subnets that no longer
// exist, so long as they're not in use.
for _, space := range providerSpaces {
// Check if the space is already in state, in which case we know
// its name.
stateSpace, ok := stateSpaceMap[string(space.ProviderId)]
var spaceTag names.SpaceTag
if ok {
spaceName := stateSpace.Name
if !names.IsValidSpace(spaceName) {
// Can only happen if an invalid name is stored
// in state.
logger.Errorf("space %q has an invalid name, ignoring", spaceName)
continue
}
spaceTag = names.NewSpaceTag(spaceName)
} else {
// The space is new, we need to create a valid name for it
// in state.
spaceName := string(space.ProviderId)
// Convert the name into a valid name that isn't already in
// use.
spaceName = convertSpaceName(spaceName, spaceNames)
spaceNames.Add(spaceName)
spaceTag = names.NewSpaceTag(spaceName)
// We need to create the space.
args := params.CreateSpacesParams{
Spaces: []params.CreateSpaceParams{{
Public: false,
SpaceTag: spaceTag.String(),
ProviderId: string(space.ProviderId),
}}}
result, err := dw.api.CreateSpaces(args)
if err != nil {
logger.Errorf("error creating space %v", err)
return errors.Trace(err)
}
if len(result.Results) != 1 {
return errors.Errorf("unexpected number of results from CreateSpaces, should be 1: %v", result)
}
if result.Results[0].Error != nil {
return errors.Errorf("error from CreateSpaces: %v", result.Results[0].Error)
}
}
// TODO(mfoord): currently no way of removing subnets, or
// changing the space they're in, so we can only add ones we
// don't already know about.
logger.Debugf("Created space %v with %v subnets", spaceTag.String(), len(space.Subnets))
for _, subnet := range space.Subnets {
if stateSubnetIds.Contains(string(subnet.ProviderId)) {
continue
}
zones := subnet.AvailabilityZones
if len(zones) == 0 {
zones = []string{"default"}
}
args := params.AddSubnetsParams{
Subnets: []params.AddSubnetParams{{
SubnetProviderId: string(subnet.ProviderId),
SpaceTag: spaceTag.String(),
Zones: zones,
}}}
logger.Tracef("Adding subnet %v", subnet.CIDR)
result, err := dw.api.AddSubnets(args)
if err != nil {
//.........這裏部分代碼省略.........