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  }