4
"launchpad.net/juju-core/environs"
5
"launchpad.net/juju-core/environs/config"
6
"launchpad.net/juju-core/log"
7
"launchpad.net/juju-core/state"
10
type maasEnvironProvider struct{}
12
var _ environs.EnvironProvider = (*maasEnvironProvider)(nil)
14
var providerInstance maasEnvironProvider
17
environs.RegisterProvider("maas", maasEnvironProvider{})
20
func (maasEnvironProvider) Open(cfg *config.Config) (environs.Environ, error) {
21
log.Debugf("environs/maas: opening environment %q.", cfg.Name())
22
return NewEnviron(cfg)
25
// Boilerplate config YAML. Don't mess with the indentation or add newlines!
26
const boilerplateYAML = `maas:
28
# Change this to where your MAAS server lives. It must specify the base path.
29
maas-server: 'http://192.168.1.1/MAAS/'
30
maas-oauth: '<add your OAuth credentials from MAAS here>'
31
admin-secret: {{rand}}
32
default-series: precise
33
authorized-keys-path: ~/.ssh/authorized_keys # or any file you want.
35
# authorized-keys: ssh-rsa keymaterialhere
38
// BoilerplateConfig is specified in the EnvironProvider interface.
39
func (maasEnvironProvider) BoilerplateConfig() string {
40
return boilerplateYAML
43
// SecretAttrs is specified in the EnvironProvider interface.
44
func (prov maasEnvironProvider) SecretAttrs(cfg *config.Config) (map[string]interface{}, error) {
45
secretAttrs := make(map[string]interface{})
46
maasCfg, err := prov.newConfig(cfg)
50
secretAttrs["maas-oauth"] = maasCfg.MAASOAuth()
51
return secretAttrs, nil
54
func (maasEnvironProvider) hostname() (string, error) {
60
return info.Hostname, nil
63
// PublicAddress is specified in the EnvironProvider interface.
64
func (prov maasEnvironProvider) PublicAddress() (string, error) {
65
return prov.hostname()
68
// PrivateAddress is specified in the EnvironProvider interface.
69
func (prov maasEnvironProvider) PrivateAddress() (string, error) {
70
return prov.hostname()
73
// InstanceId is specified in the EnvironProvider interface.
74
func (maasEnvironProvider) InstanceId() (state.InstanceId, error) {
80
return state.InstanceId(info.InstanceId), nil