github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/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 "github.com/juju/names/v5" 8 9 "github.com/juju/juju/apiserver/common" 10 "github.com/juju/juju/core/constraints" 11 coresecrets "github.com/juju/juju/core/secrets" 12 "github.com/juju/juju/environs/config" 13 "github.com/juju/juju/state" 14 ) 15 16 // Backend contains the state.State methods used in this package, 17 // allowing stubs to be created for testing. 18 type Backend interface { 19 common.BlockGetter 20 ControllerTag() names.ControllerTag 21 ModelTag() names.ModelTag 22 ModelConfigValues() (config.ConfigValues, error) 23 UpdateModelConfig(map[string]interface{}, []string, ...state.ValidateConfigFunc) error 24 Sequences() (map[string]int, error) 25 SetSLA(level, owner string, credentials []byte) error 26 SLALevel() (string, error) 27 SpaceByName(string) error 28 SetModelConstraints(value constraints.Value) error 29 ModelConstraints() (constraints.Value, error) 30 GetSecretBackend(string) (*coresecrets.SecretBackend, error) 31 } 32 33 type stateShim struct { 34 *state.State 35 model *state.Model 36 } 37 38 func (st stateShim) UpdateModelConfig(u map[string]interface{}, r []string, a ...state.ValidateConfigFunc) error { 39 return st.model.UpdateModelConfig(u, r, a...) 40 } 41 42 func (st stateShim) ModelConfigValues() (config.ConfigValues, error) { 43 return st.model.ModelConfigValues() 44 } 45 46 func (st stateShim) ModelTag() names.ModelTag { 47 m, err := st.State.Model() 48 if err != nil { 49 return names.NewModelTag(st.State.ModelUUID()) 50 } 51 52 return m.ModelTag() 53 } 54 55 func (st stateShim) SpaceByName(name string) error { 56 _, err := st.State.SpaceByName(name) 57 return err 58 } 59 60 func (st stateShim) GetSecretBackend(name string) (*coresecrets.SecretBackend, error) { 61 backends := state.NewSecretBackends(st.State) 62 return backends.GetSecretBackend(name) 63 } 64 65 // NewStateBackend creates a backend for the facade to use. 66 func NewStateBackend(m *state.Model) Backend { 67 return stateShim{m.State(), m} 68 }