github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/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  }