github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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/facade"
    11  	"github.com/juju/juju/apiserver/params"
    12  	"github.com/juju/juju/state"
    13  )
    14  
    15  func init() {
    16  	common.RegisterStandardFacade("DiscoverSpaces", 2, NewDiscoverSpacesAPI)
    17  }
    18  
    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
    24  }
    25  
    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)
    29  }
    30  
    31  func NewDiscoverSpacesAPIWithBacking(st networkingcommon.NetworkBacking, resources facade.Resources, authorizer facade.Authorizer) (*DiscoverSpacesAPI, error) {
    32  	if !authorizer.AuthModelManager() {
    33  		return nil, common.ErrPerm
    34  	}
    35  	return &DiscoverSpacesAPI{
    36  		st:         st,
    37  		authorizer: authorizer,
    38  		resources:  resources,
    39  	}, nil
    40  }
    41  
    42  // ModelConfig returns the current model's configuration.
    43  func (api *DiscoverSpacesAPI) ModelConfig() (params.ModelConfigResult, error) {
    44  	result := params.ModelConfigResult{}
    45  
    46  	config, err := api.st.ModelConfig()
    47  	if err != nil {
    48  		return result, err
    49  	}
    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
    54  	return result, nil
    55  }
    56  
    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)
    61  }
    62  
    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()
    66  	if err != nil {
    67  		return results, errors.Trace(err)
    68  	}
    69  
    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()
    75  
    76  		subnets, err := space.Subnets()
    77  		if err != nil {
    78  			err = errors.Annotatef(err, "fetching subnets")
    79  			result.Error = common.ServerError(err)
    80  			results.Results[i] = result
    81  			continue
    82  		}
    83  
    84  		result.Subnets = make([]params.Subnet, len(subnets))
    85  		for i, subnet := range subnets {
    86  			result.Subnets[i] = networkingcommon.BackingSubnetToParamsSubnet(subnet)
    87  		}
    88  		results.Results[i] = result
    89  	}
    90  	return results, nil
    91  }
    92  
    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)
    96  }
    97  
    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)
   102  }