github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/api/spaces/spaces.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package spaces 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/loggo" 9 "github.com/juju/names" 10 11 "github.com/juju/juju/api/base" 12 "github.com/juju/juju/apiserver/params" 13 ) 14 15 var logger = loggo.GetLogger("juju.api.spaces") 16 17 const spacesFacade = "Spaces" 18 19 // API provides access to the InstancePoller API facade. 20 type API struct { 21 base.ClientFacade 22 facade base.FacadeCaller 23 } 24 25 // NewAPI creates a new client-side Spaces facade. 26 func NewAPI(caller base.APICallCloser) *API { 27 if caller == nil { 28 panic("caller is nil") 29 } 30 clientFacade, facadeCaller := base.NewClientFacade(caller, spacesFacade) 31 return &API{ 32 ClientFacade: clientFacade, 33 facade: facadeCaller, 34 } 35 } 36 37 func makeCreateSpaceParams(name string, subnetIds []string, public bool) params.CreateSpaceParams { 38 spaceTag := names.NewSpaceTag(name).String() 39 subnetTags := make([]string, len(subnetIds)) 40 41 for i, s := range subnetIds { 42 subnetTags[i] = names.NewSubnetTag(s).String() 43 } 44 45 return params.CreateSpaceParams{ 46 SpaceTag: spaceTag, 47 SubnetTags: subnetTags, 48 Public: public, 49 } 50 } 51 52 // CreateSpace creates a new Juju network space, associating the 53 // specified subnets with it (optional; can be empty). 54 func (api *API) CreateSpace(name string, subnetIds []string, public bool) error { 55 var response params.ErrorResults 56 params := params.CreateSpacesParams{ 57 Spaces: []params.CreateSpaceParams{makeCreateSpaceParams(name, subnetIds, public)}, 58 } 59 err := api.facade.FacadeCall("CreateSpaces", params, &response) 60 if err != nil { 61 return errors.Trace(err) 62 } 63 return response.OneError() 64 } 65 66 // ListSpaces lists all available spaces and their associated subnets. 67 func (api *API) ListSpaces() ([]params.Space, error) { 68 var response params.ListSpacesResults 69 err := api.facade.FacadeCall("ListSpaces", nil, &response) 70 return response.Results, err 71 }