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 }