github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/environs/statepolicy.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package environs 5 6 import ( 7 "github.com/juju/errors" 8 9 "github.com/juju/juju/constraints" 10 "github.com/juju/juju/environs/config" 11 "github.com/juju/juju/state" 12 ) 13 14 // environStatePolicy implements state.Policy in 15 // terms of environs.Environ and related types. 16 type environStatePolicy struct{} 17 18 var _ state.Policy = environStatePolicy{} 19 20 // NewStatePolicy returns a state.Policy that is 21 // implemented in terms of Environ and related 22 // types. 23 func NewStatePolicy() state.Policy { 24 return environStatePolicy{} 25 } 26 27 func (environStatePolicy) Prechecker(cfg *config.Config) (state.Prechecker, error) { 28 // Environ implements state.Prechecker. 29 return New(cfg) 30 } 31 32 func (environStatePolicy) ConfigValidator(providerType string) (state.ConfigValidator, error) { 33 // EnvironProvider implements state.ConfigValidator. 34 return Provider(providerType) 35 } 36 37 func (environStatePolicy) EnvironCapability(cfg *config.Config) (state.EnvironCapability, error) { 38 // Environ implements state.EnvironCapability. 39 return New(cfg) 40 } 41 42 func (environStatePolicy) ConstraintsValidator(cfg *config.Config) (constraints.Validator, error) { 43 env, err := New(cfg) 44 if err != nil { 45 return nil, err 46 } 47 return env.ConstraintsValidator() 48 } 49 50 func (environStatePolicy) InstanceDistributor(cfg *config.Config) (state.InstanceDistributor, error) { 51 env, err := New(cfg) 52 if err != nil { 53 return nil, err 54 } 55 if p, ok := env.(state.InstanceDistributor); ok { 56 return p, nil 57 } 58 return nil, errors.NotImplementedf("InstanceDistributor") 59 }