github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/common/environ_config.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common 5 6 import ( 7 "github.com/juju/juju/caas" 8 "github.com/juju/juju/environs" 9 environscloudspec "github.com/juju/juju/environs/cloudspec" 10 "github.com/juju/juju/environs/config" 11 "github.com/juju/juju/state" 12 "github.com/juju/juju/state/stateenvirons" 13 ) 14 15 // EnvironConfigGetterFuncs holds implements environs.EnvironConfigGetter 16 // in a pluggable way. 17 type EnvironConfigGetterFuncs struct { 18 ModelConfigFunc func() (*config.Config, error) 19 CloudSpecFunc func() (environscloudspec.CloudSpec, error) 20 } 21 22 // ModelConfig implements EnvironConfigGetter. 23 func (f EnvironConfigGetterFuncs) ModelConfig() (*config.Config, error) { 24 return f.ModelConfigFunc() 25 } 26 27 // CloudSpec implements environs.EnvironConfigGetter. 28 func (f EnvironConfigGetterFuncs) CloudSpec() (environscloudspec.CloudSpec, error) { 29 return f.CloudSpecFunc() 30 } 31 32 // NewEnvironFunc is a function that returns a BootstrapEnviron instance. 33 type NewEnvironFunc func() (environs.BootstrapEnviron, error) 34 35 // EnvironFuncForModel is a helper function that returns a NewEnvironFunc suitable for 36 // the specified model. 37 func EnvironFuncForModel(model stateenvirons.Model, configGetter environs.EnvironConfigGetter) NewEnvironFunc { 38 if model.Type() == state.ModelTypeCAAS { 39 return func() (environs.BootstrapEnviron, error) { 40 f := stateenvirons.GetNewCAASBrokerFunc(caas.New) 41 return f(model) 42 } 43 } 44 return func() (environs.BootstrapEnviron, error) { 45 return environs.GetEnviron(configGetter, environs.New) 46 } 47 }