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  }