github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/apiserver/discoverspaces/discoverspaces.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package discoverspaces 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/juju/apiserver/common" 9 "github.com/juju/juju/apiserver/common/networkingcommon" 10 "github.com/juju/juju/apiserver/params" 11 "github.com/juju/juju/state" 12 ) 13 14 func init() { 15 common.RegisterStandardFacade("DiscoverSpaces", 2, NewDiscoverSpacesAPI) 16 } 17 18 // DiscoverSpacesAPI implements the API used by the discoverspaces worker. 19 type DiscoverSpacesAPI struct { 20 st networkingcommon.NetworkBacking 21 resources *common.Resources 22 authorizer common.Authorizer 23 } 24 25 // NewDiscoverSpacesAPI creates a new instance of the DiscoverSpaces API. 26 func NewDiscoverSpacesAPI(st *state.State, resources *common.Resources, authorizer common.Authorizer) (*DiscoverSpacesAPI, error) { 27 return NewDiscoverSpacesAPIWithBacking(networkingcommon.NewStateShim(st), resources, authorizer) 28 } 29 30 func NewDiscoverSpacesAPIWithBacking(st networkingcommon.NetworkBacking, resources *common.Resources, authorizer common.Authorizer) (*DiscoverSpacesAPI, error) { 31 if !authorizer.AuthModelManager() { 32 return nil, common.ErrPerm 33 } 34 return &DiscoverSpacesAPI{ 35 st: st, 36 authorizer: authorizer, 37 resources: resources, 38 }, nil 39 } 40 41 // ModelConfig returns the current model's configuration. 42 func (api *DiscoverSpacesAPI) ModelConfig() (params.ModelConfigResult, error) { 43 result := params.ModelConfigResult{} 44 45 config, err := api.st.ModelConfig() 46 if err != nil { 47 return result, err 48 } 49 allAttrs := config.AllAttrs() 50 // No need to obscure any secrets as caller needs to be a ModelManager to 51 // call any api methods. 52 result.Config = allAttrs 53 return result, nil 54 } 55 56 // CreateSpaces creates a new Juju network space, associating the 57 // specified subnets with it (optional; can be empty). 58 func (api *DiscoverSpacesAPI) CreateSpaces(args params.CreateSpacesParams) (results params.ErrorResults, err error) { 59 return networkingcommon.CreateSpaces(api.st, args) 60 } 61 62 // ListSpaces lists all the available spaces and their associated subnets. 63 func (api *DiscoverSpacesAPI) ListSpaces() (results params.DiscoverSpacesResults, err error) { 64 spaces, err := api.st.AllSpaces() 65 if err != nil { 66 return results, errors.Trace(err) 67 } 68 69 results.Results = make([]params.ProviderSpace, len(spaces)) 70 for i, space := range spaces { 71 result := params.ProviderSpace{} 72 result.ProviderId = string(space.ProviderId()) 73 result.Name = space.Name() 74 75 subnets, err := space.Subnets() 76 if err != nil { 77 err = errors.Annotatef(err, "fetching subnets") 78 result.Error = common.ServerError(err) 79 results.Results[i] = result 80 continue 81 } 82 83 result.Subnets = make([]params.Subnet, len(subnets)) 84 for i, subnet := range subnets { 85 result.Subnets[i] = networkingcommon.BackingSubnetToParamsSubnet(subnet) 86 } 87 results.Results[i] = result 88 } 89 return results, nil 90 } 91 92 // AddSubnets is defined on the API interface. 93 func (api *DiscoverSpacesAPI) AddSubnets(args params.AddSubnetsParams) (params.ErrorResults, error) { 94 return networkingcommon.AddSubnets(api.st, args) 95 } 96 97 // ListSubnets lists all the available subnets or only those matching 98 // all given optional filters. 99 func (api *DiscoverSpacesAPI) ListSubnets(args params.SubnetsFilters) (results params.ListSubnetsResults, err error) { 100 return networkingcommon.ListSubnets(api.st, args) 101 }