github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/api/environmentmanager/environmentmanager.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package environmentmanager 5 6 import ( 7 "fmt" 8 9 "github.com/juju/errors" 10 "github.com/juju/loggo" 11 "github.com/juju/names" 12 13 "github.com/juju/juju/api/base" 14 "github.com/juju/juju/apiserver/params" 15 ) 16 17 var logger = loggo.GetLogger("juju.api.environmentmanager") 18 19 // Client provides methods that the Juju client command uses to interact 20 // with environments stored in the Juju Server. 21 type Client struct { 22 base.ClientFacade 23 facade base.FacadeCaller 24 } 25 26 // NewClient creates a new `Client` based on an existing authenticated API 27 // connection. 28 func NewClient(st base.APICallCloser) *Client { 29 frontend, backend := base.NewClientFacade(st, "EnvironmentManager") 30 logger.Debugf("%#v", frontend) 31 return &Client{ClientFacade: frontend, facade: backend} 32 } 33 34 // ConfigSkeleton returns config values to be used as a starting point for the 35 // API caller to construct a valid environment specific config. The provider 36 // and region params are there for future use, and current behaviour expects 37 // both of these to be empty. 38 func (c *Client) ConfigSkeleton(provider, region string) (params.EnvironConfig, error) { 39 var result params.EnvironConfigResult 40 args := params.EnvironmentSkeletonConfigArgs{ 41 Provider: provider, 42 Region: region, 43 } 44 err := c.facade.FacadeCall("ConfigSkeleton", args, &result) 45 if err != nil { 46 return nil, errors.Trace(err) 47 } 48 return result.Config, nil 49 } 50 51 // CreateEnvironment creates a new environment using the account and 52 // environment config specified in the args. 53 func (c *Client) CreateEnvironment(owner string, account, config map[string]interface{}) (params.Environment, error) { 54 var result params.Environment 55 if !names.IsValidUser(owner) { 56 return result, fmt.Errorf("invalid owner name %q", owner) 57 } 58 createArgs := params.EnvironmentCreateArgs{ 59 OwnerTag: names.NewUserTag(owner).String(), 60 Account: account, 61 Config: config, 62 } 63 err := c.facade.FacadeCall("CreateEnvironment", createArgs, &result) 64 if err != nil { 65 return result, errors.Trace(err) 66 } 67 logger.Infof("created environment %s (%s)", result.Name, result.UUID) 68 return result, nil 69 } 70 71 // ListEnvironments returns the environments that the specified user 72 // has access to in the current server. Only that state server owner 73 // can list environments for any user (at this stage). Other users 74 // can only ask about their own environments. 75 func (c *Client) ListEnvironments(user string) ([]params.Environment, error) { 76 var result params.EnvironmentList 77 if !names.IsValidUser(user) { 78 return nil, fmt.Errorf("invalid user name %q", user) 79 } 80 entity := params.Entity{names.NewUserTag(user).String()} 81 err := c.facade.FacadeCall("ListEnvironments", entity, &result) 82 if err != nil { 83 return nil, errors.Trace(err) 84 } 85 return result.Environments, nil 86 }