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  }