github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/client/modelconfig/backend.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package modelconfig 5 6 import ( 7 names "gopkg.in/juju/names.v2" 8 9 "github.com/juju/juju/apiserver/common" 10 "github.com/juju/juju/environs/config" 11 "github.com/juju/juju/state" 12 ) 13 14 // Backend contains the state.State methods used in this package, 15 // allowing stubs to be created for testing. 16 type Backend interface { 17 common.BlockGetter 18 ControllerTag() names.ControllerTag 19 ModelTag() names.ModelTag 20 ModelConfigValues() (config.ConfigValues, error) 21 UpdateModelConfig(map[string]interface{}, []string, ...state.ValidateConfigFunc) error 22 Sequences() (map[string]int, error) 23 SetSLA(level, owner string, credentials []byte) error 24 SLALevel() (string, error) 25 } 26 27 type stateShim struct { 28 *state.State 29 model *state.Model 30 } 31 32 func (st stateShim) UpdateModelConfig(u map[string]interface{}, r []string, a ...state.ValidateConfigFunc) error { 33 return st.model.UpdateModelConfig(u, r, a...) 34 } 35 36 func (st stateShim) ModelConfigValues() (config.ConfigValues, error) { 37 return st.model.ModelConfigValues() 38 } 39 40 func (st stateShim) ModelTag() names.ModelTag { 41 m, err := st.State.Model() 42 if err != nil { 43 return names.NewModelTag(st.State.ModelUUID()) 44 } 45 46 return m.ModelTag() 47 } 48 49 // NewStateBackend creates a backend for the facade to use. 50 func NewStateBackend(m *state.Model) Backend { 51 return stateShim{m.State(), m} 52 }