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  }