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  }