1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
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/facade"
11
"github.com/juju/juju/apiserver/params"
12
"github.com/juju/juju/state"
16
common.RegisterStandardFacade("DiscoverSpaces", 2, NewDiscoverSpacesAPI)
19
// DiscoverSpacesAPI implements the API used by the discoverspaces worker.
20
type DiscoverSpacesAPI struct {
21
st networkingcommon.NetworkBacking
22
resources facade.Resources
23
authorizer facade.Authorizer
26
// NewDiscoverSpacesAPI creates a new instance of the DiscoverSpaces API.
27
func NewDiscoverSpacesAPI(st *state.State, resources facade.Resources, authorizer facade.Authorizer) (*DiscoverSpacesAPI, error) {
28
return NewDiscoverSpacesAPIWithBacking(networkingcommon.NewStateShim(st), resources, authorizer)
31
func NewDiscoverSpacesAPIWithBacking(st networkingcommon.NetworkBacking, resources facade.Resources, authorizer facade.Authorizer) (*DiscoverSpacesAPI, error) {
32
if !authorizer.AuthModelManager() {
33
return nil, common.ErrPerm
35
return &DiscoverSpacesAPI{
37
authorizer: authorizer,
42
// ModelConfig returns the current model's configuration.
43
func (api *DiscoverSpacesAPI) ModelConfig() (params.ModelConfigResult, error) {
44
result := params.ModelConfigResult{}
46
config, err := api.st.ModelConfig()
50
allAttrs := config.AllAttrs()
51
// No need to obscure any secrets as caller needs to be a ModelManager to
52
// call any api methods.
53
result.Config = allAttrs
57
// CreateSpaces creates a new Juju network space, associating the
58
// specified subnets with it (optional; can be empty).
59
func (api *DiscoverSpacesAPI) CreateSpaces(args params.CreateSpacesParams) (results params.ErrorResults, err error) {
60
return networkingcommon.CreateSpaces(api.st, args)
63
// ListSpaces lists all the available spaces and their associated subnets.
64
func (api *DiscoverSpacesAPI) ListSpaces() (results params.DiscoverSpacesResults, err error) {
65
spaces, err := api.st.AllSpaces()
67
return results, errors.Trace(err)
70
results.Results = make([]params.ProviderSpace, len(spaces))
71
for i, space := range spaces {
72
result := params.ProviderSpace{}
73
result.ProviderId = string(space.ProviderId())
74
result.Name = space.Name()
76
subnets, err := space.Subnets()
78
err = errors.Annotatef(err, "fetching subnets")
79
result.Error = common.ServerError(err)
80
results.Results[i] = result
84
result.Subnets = make([]params.Subnet, len(subnets))
85
for i, subnet := range subnets {
86
result.Subnets[i] = networkingcommon.BackingSubnetToParamsSubnet(subnet)
88
results.Results[i] = result
93
// AddSubnets is defined on the API interface.
94
func (api *DiscoverSpacesAPI) AddSubnets(args params.AddSubnetsParams) (params.ErrorResults, error) {
95
return networkingcommon.AddSubnets(api.st, args)
98
// ListSubnets lists all the available subnets or only those matching
99
// all given optional filters.
100
func (api *DiscoverSpacesAPI) ListSubnets(args params.SubnetsFilters) (results params.ListSubnetsResults, err error) {
101
return networkingcommon.ListSubnets(api.st, args)