github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/cmd/modelcmd/clientstore.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package modelcmd 5 6 import ( 7 "github.com/juju/errors" 8 "gopkg.in/juju/names.v2" 9 10 "github.com/juju/juju/jujuclient" 11 ) 12 13 // QualifyingClientStore wraps a jujuclient.ClientStore, modifying 14 // model-related methods such that they accept unqualified model 15 // names, and automatically qualify them with the logged-in user 16 // name as necessary. 17 type QualifyingClientStore struct { 18 jujuclient.ClientStore 19 } 20 21 // QualifiedModelName returns a Qualified model name, given either 22 // an unqualified or qualified model name. If the input is a 23 // fully qualified name, it is returned untouched; otherwise it is 24 // return qualified with the logged-in user name. 25 func (s QualifyingClientStore) QualifiedModelName(controllerName, modelName string) (string, error) { 26 if !jujuclient.IsQualifiedModelName(modelName) { 27 details, err := s.ClientStore.AccountDetails(controllerName) 28 if err != nil { 29 return "", errors.Annotate(err, "getting account details for qualifying model name") 30 } 31 owner := names.NewUserTag(details.User) 32 modelName = jujuclient.JoinOwnerModelName(owner, modelName) 33 } else { 34 unqualifiedModelName, owner, err := jujuclient.SplitModelName(modelName) 35 if err != nil { 36 return "", errors.Trace(err) 37 } 38 owner = names.NewUserTag(owner.Id()) 39 modelName = jujuclient.JoinOwnerModelName(owner, unqualifiedModelName) 40 } 41 return modelName, nil 42 } 43 44 // Implements jujuclient.ModelGetter. 45 func (s QualifyingClientStore) ModelByName(controllerName, modelName string) (*jujuclient.ModelDetails, error) { 46 modelName, err := s.QualifiedModelName(controllerName, modelName) 47 if err != nil { 48 return nil, errors.Annotatef(err, "getting model %q", modelName) 49 } 50 return s.ClientStore.ModelByName(controllerName, modelName) 51 } 52 53 // Implements jujuclient.ModelUpdater. 54 func (s QualifyingClientStore) UpdateModel(controllerName, modelName string, details jujuclient.ModelDetails) error { 55 modelName, err := s.QualifiedModelName(controllerName, modelName) 56 if err != nil { 57 return errors.Annotatef(err, "updating model %q", modelName) 58 } 59 return s.ClientStore.UpdateModel(controllerName, modelName, details) 60 } 61 62 // Implements jujuclient.ModelUpdater. 63 func (s QualifyingClientStore) SetCurrentModel(controllerName, modelName string) error { 64 modelName, err := s.QualifiedModelName(controllerName, modelName) 65 if err != nil { 66 return errors.Annotatef(err, "setting current model to %q", modelName) 67 } 68 return s.ClientStore.SetCurrentModel(controllerName, modelName) 69 } 70 71 // Implements jujuclient.ModelRemover. 72 func (s QualifyingClientStore) RemoveModel(controllerName, modelName string) error { 73 modelName, err := s.QualifiedModelName(controllerName, modelName) 74 if err != nil { 75 return errors.Annotatef(err, "removing model %q", modelName) 76 } 77 return s.ClientStore.RemoveModel(controllerName, modelName) 78 }