github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/apiserver/modelmanager/state.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package modelmanager 5 6 import ( 7 "github.com/juju/names" 8 9 "github.com/juju/juju/apiserver/common" 10 "github.com/juju/juju/environs/config" 11 "github.com/juju/juju/state" 12 "github.com/juju/juju/status" 13 ) 14 15 type Backend interface { 16 common.APIHostPortsGetter 17 common.ModelConfigGetter 18 common.ToolsStorageGetter 19 20 ModelUUID() string 21 ModelsForUser(names.UserTag) ([]*state.UserModel, error) 22 IsControllerAdministrator(user names.UserTag) (bool, error) 23 NewModel(state.ModelArgs) (*state.Model, *state.State, error) 24 ControllerModel() (*state.Model, error) 25 ForModel(tag names.ModelTag) (Backend, error) 26 Model() (Model, error) 27 AddModelUser(state.ModelUserSpec) (*state.ModelUser, error) 28 RemoveModelUser(names.UserTag) error 29 ModelUser(names.UserTag) (*state.ModelUser, error) 30 Close() error 31 } 32 33 type Model interface { 34 Config() (*config.Config, error) 35 Life() state.Life 36 Owner() names.UserTag 37 Status() (status.StatusInfo, error) 38 Users() ([]common.ModelUser, error) 39 } 40 41 type stateShim struct { 42 *state.State 43 } 44 45 func NewStateBackend(st *state.State) Backend { 46 return stateShim{st} 47 } 48 49 func (st stateShim) ForModel(tag names.ModelTag) (Backend, error) { 50 otherState, err := st.State.ForModel(tag) 51 if err != nil { 52 return nil, err 53 } 54 return stateShim{otherState}, nil 55 } 56 57 func (st stateShim) Model() (Model, error) { 58 m, err := st.State.Model() 59 if err != nil { 60 return nil, err 61 } 62 return modelShim{m}, nil 63 } 64 65 type modelShim struct { 66 *state.Model 67 } 68 69 func (m modelShim) Users() ([]common.ModelUser, error) { 70 stateUsers, err := m.Model.Users() 71 if err != nil { 72 return nil, err 73 } 74 users := make([]common.ModelUser, len(stateUsers)) 75 for i, user := range stateUsers { 76 users[i] = user 77 } 78 return users, nil 79 }