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 }