github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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/cloud"
    13  	"github.com/juju/juju/environs"
    14  	"github.com/juju/juju/environs/config"
    15  )
    16  
    17  type environProvider struct {
    18  	environProviderCredentials
    19  }
    20  
    21  var providerInstance = environProvider{}
    22  var _ environs.EnvironProvider = providerInstance
    23  
    24  var logger = loggo.GetLogger("juju.provider.vmware")
    25  
    26  // Open implements environs.EnvironProvider.
    27  func (environProvider) Open(cfg *config.Config) (environs.Environ, error) {
    28  	env, err := newEnviron(cfg)
    29  	return env, errors.Trace(err)
    30  }
    31  
    32  // BootstrapConfig implements environs.EnvironProvider.
    33  func (p environProvider) BootstrapConfig(args environs.BootstrapConfigParams) (*config.Config, error) {
    34  	cfg := args.Config
    35  	switch authType := args.Credentials.AuthType(); authType {
    36  	case cloud.UserPassAuthType:
    37  		credentialAttrs := args.Credentials.Attributes()
    38  		var err error
    39  		cfg, err = cfg.Apply(map[string]interface{}{
    40  			cfgUser:     credentialAttrs["user"],
    41  			cfgPassword: credentialAttrs["password"],
    42  		})
    43  		if err != nil {
    44  			return nil, errors.Trace(err)
    45  		}
    46  	default:
    47  		return nil, errors.NotSupportedf("%q auth-type", authType)
    48  	}
    49  	return p.PrepareForCreateEnvironment(cfg)
    50  }
    51  
    52  // PrepareForBootstrap implements environs.EnvironProvider.
    53  func (p environProvider) PrepareForBootstrap(ctx environs.BootstrapContext, cfg *config.Config) (environs.Environ, error) {
    54  	env, err := newEnviron(cfg)
    55  	if err != nil {
    56  		return nil, errors.Trace(err)
    57  	}
    58  
    59  	return env, nil
    60  }
    61  
    62  // PrepareForCreateEnvironment is specified in the EnvironProvider interface.
    63  func (environProvider) PrepareForCreateEnvironment(cfg *config.Config) (*config.Config, error) {
    64  	return cfg, nil
    65  }
    66  
    67  // RestrictedConfigAttributes is specified in the EnvironProvider interface.
    68  func (environProvider) RestrictedConfigAttributes() []string {
    69  	return []string{
    70  		cfgDatacenter,
    71  		cfgHost,
    72  		cfgUser,
    73  		cfgPassword,
    74  	}
    75  }
    76  
    77  // Validate implements environs.EnvironProvider.
    78  func (environProvider) Validate(cfg, old *config.Config) (valid *config.Config, err error) {
    79  	if old == nil {
    80  		ecfg, err := newValidConfig(cfg, configDefaults)
    81  		if err != nil {
    82  			return nil, errors.Annotate(err, "invalid config")
    83  		}
    84  		return ecfg.Config, nil
    85  	}
    86  
    87  	// The defaults should be set already, so we pass nil.
    88  	ecfg, err := newValidConfig(old, nil)
    89  	if err != nil {
    90  		return nil, errors.Annotate(err, "invalid base config")
    91  	}
    92  
    93  	if err := ecfg.update(cfg); err != nil {
    94  		return nil, errors.Annotate(err, "invalid config change")
    95  	}
    96  
    97  	return ecfg.Config, nil
    98  }
    99  
   100  // SecretAttrs implements environs.EnvironProvider.
   101  func (environProvider) SecretAttrs(cfg *config.Config) (map[string]string, error) {
   102  	// The defaults should be set already, so we pass nil.
   103  	ecfg, err := newValidConfig(cfg, nil)
   104  	if err != nil {
   105  		return nil, errors.Trace(err)
   106  	}
   107  	return ecfg.secret(), nil
   108  }