github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/provider/vsphere/provider.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  // +build !gccgo
     5  
     6  package vsphere
     7  
     8  import (
     9  	"github.com/juju/errors"
    10  	"github.com/juju/loggo"
    11  
    12  	"github.com/juju/juju/environs"
    13  	"github.com/juju/juju/environs/config"
    14  )
    15  
    16  type environProvider struct{}
    17  
    18  var providerInstance = environProvider{}
    19  var _ environs.EnvironProvider = providerInstance
    20  
    21  var logger = loggo.GetLogger("juju.provider.vmware")
    22  
    23  // Open implements environs.EnvironProvider.
    24  func (environProvider) Open(cfg *config.Config) (environs.Environ, error) {
    25  	env, err := newEnviron(cfg)
    26  	return env, errors.Trace(err)
    27  }
    28  
    29  // PrepareForBootstrap implements environs.EnvironProvider.
    30  func (p environProvider) PrepareForBootstrap(ctx environs.BootstrapContext, cfg *config.Config) (environs.Environ, error) {
    31  	cfg, err := p.PrepareForCreateEnvironment(cfg)
    32  	if err != nil {
    33  		return nil, errors.Trace(err)
    34  	}
    35  	env, err := newEnviron(cfg)
    36  	if err != nil {
    37  		return nil, errors.Trace(err)
    38  	}
    39  
    40  	return env, nil
    41  }
    42  
    43  // PrepareForCreateEnvironment is specified in the EnvironProvider interface.
    44  func (environProvider) PrepareForCreateEnvironment(cfg *config.Config) (*config.Config, error) {
    45  	return cfg, nil
    46  }
    47  
    48  // RestrictedConfigAttributes is specified in the EnvironProvider interface.
    49  func (environProvider) RestrictedConfigAttributes() []string {
    50  	return []string{
    51  		cfgDatacenter,
    52  		cfgHost,
    53  		cfgUser,
    54  		cfgPassword,
    55  	}
    56  }
    57  
    58  // Validate implements environs.EnvironProvider.
    59  func (environProvider) Validate(cfg, old *config.Config) (valid *config.Config, err error) {
    60  	if old == nil {
    61  		ecfg, err := newValidConfig(cfg, configDefaults)
    62  		if err != nil {
    63  			return nil, errors.Annotate(err, "invalid config")
    64  		}
    65  		return ecfg.Config, nil
    66  	}
    67  
    68  	// The defaults should be set already, so we pass nil.
    69  	ecfg, err := newValidConfig(old, nil)
    70  	if err != nil {
    71  		return nil, errors.Annotate(err, "invalid base config")
    72  	}
    73  
    74  	if err := ecfg.update(cfg); err != nil {
    75  		return nil, errors.Annotate(err, "invalid config change")
    76  	}
    77  
    78  	return ecfg.Config, nil
    79  }
    80  
    81  // SecretAttrs implements environs.EnvironProvider.
    82  func (environProvider) SecretAttrs(cfg *config.Config) (map[string]string, error) {
    83  	// The defaults should be set already, so we pass nil.
    84  	ecfg, err := newValidConfig(cfg, nil)
    85  	if err != nil {
    86  		return nil, errors.Trace(err)
    87  	}
    88  	return ecfg.secret(), nil
    89  }
    90  
    91  // BoilerplateConfig implements environs.EnvironProvider.
    92  func (environProvider) BoilerplateConfig() string {
    93  	// boilerplateConfig is kept in config.go, in the hope that people editing
    94  	// config will keep it up to date.
    95  	return boilerplateConfig
    96  }