~themue/juju-core/053-env-more-script-friendly

« back to all changes in this revision

Viewing changes to environs/maas/environprovider.go

Merge trunk and resolve conflicts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package maas
 
2
 
 
3
import (
 
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"
 
8
)
 
9
 
 
10
type maasEnvironProvider struct{}
 
11
 
 
12
var _ environs.EnvironProvider = (*maasEnvironProvider)(nil)
 
13
 
 
14
var providerInstance maasEnvironProvider
 
15
 
 
16
func init() {
 
17
        environs.RegisterProvider("maas", maasEnvironProvider{})
 
18
}
 
19
 
 
20
func (maasEnvironProvider) Open(cfg *config.Config) (environs.Environ, error) {
 
21
        log.Debugf("environs/maas: opening environment %q.", cfg.Name())
 
22
        return NewEnviron(cfg)
 
23
}
 
24
 
 
25
// Boilerplate config YAML.  Don't mess with the indentation or add newlines!
 
26
const boilerplateYAML = `maas:
 
27
  type: 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.
 
34
  # Or:
 
35
  # authorized-keys: ssh-rsa keymaterialhere
 
36
`
 
37
 
 
38
// BoilerplateConfig is specified in the EnvironProvider interface.
 
39
func (maasEnvironProvider) BoilerplateConfig() string {
 
40
        return boilerplateYAML
 
41
}
 
42
 
 
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)
 
47
        if err != nil {
 
48
                return nil, err
 
49
        }
 
50
        secretAttrs["maas-oauth"] = maasCfg.MAASOAuth()
 
51
        return secretAttrs, nil
 
52
}
 
53
 
 
54
func (maasEnvironProvider) hostname() (string, error) {
 
55
        info := machineInfo{}
 
56
        err := info.load()
 
57
        if err != nil {
 
58
                return "", err
 
59
        }
 
60
        return info.Hostname, nil
 
61
}
 
62
 
 
63
// PublicAddress is specified in the EnvironProvider interface.
 
64
func (prov maasEnvironProvider) PublicAddress() (string, error) {
 
65
        return prov.hostname()
 
66
}
 
67
 
 
68
// PrivateAddress is specified in the EnvironProvider interface.
 
69
func (prov maasEnvironProvider) PrivateAddress() (string, error) {
 
70
        return prov.hostname()
 
71
}
 
72
 
 
73
// InstanceId is specified in the EnvironProvider interface.
 
74
func (maasEnvironProvider) InstanceId() (state.InstanceId, error) {
 
75
        info := machineInfo{}
 
76
        err := info.load()
 
77
        if err != nil {
 
78
                return "", err
 
79
        }
 
80
        return state.InstanceId(info.InstanceId), nil
 
81
}