~juju-qa/ubuntu/xenial/juju/xenial-2.0-beta3

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/provider/maas/instance.go

  • Committer: Martin Packman
  • Date: 2016-03-30 19:31:08 UTC
  • mfrom: (1.1.41)
  • Revision ID: martin.packman@canonical.com-20160330193108-h9iz3ak334uk0z5r
Merge new upstream source 2.0~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
 
13
13
        "github.com/juju/juju/instance"
14
14
        "github.com/juju/juju/network"
 
15
        "github.com/juju/juju/status"
15
16
)
16
17
 
17
18
type maasInstance struct {
18
 
        maasObject *gomaasapi.MAASObject
 
19
        maasObject   *gomaasapi.MAASObject
 
20
        environ      *maasEnviron
 
21
        statusGetter func(instance.Id) (string, string)
19
22
}
20
23
 
21
24
var _ instance.Instance = (*maasInstance)(nil)
43
46
        return instance.Id(maasObject.URI().String())
44
47
}
45
48
 
46
 
func (mi *maasInstance) Status() string {
47
 
        // MAAS does not track node status once they're allocated.
48
 
        // Since any instance that juju knows about will be an
49
 
        // allocated one, it doesn't make sense to report any
50
 
        // state unless we obtain it through some means other than
51
 
        // through the MAAS API.
52
 
        return ""
 
49
// Status returns a juju status based on the maas instance returned
 
50
// status message.
 
51
func (mi *maasInstance) Status() instance.InstanceStatus {
 
52
        maasInstanceStatus := status.StatusEmpty
 
53
        statusMsg, substatus := mi.statusGetter(mi.Id())
 
54
        switch statusMsg {
 
55
        case "":
 
56
                logger.Debugf("unable to obtain status of instance %s", mi.Id())
 
57
                statusMsg = "error in getting status"
 
58
        case "Deployed":
 
59
                maasInstanceStatus = status.StatusRunning
 
60
        case "Deploying":
 
61
                maasInstanceStatus = status.StatusAllocating
 
62
                if substatus != "" {
 
63
                        statusMsg = fmt.Sprintf("%s: %s", statusMsg, substatus)
 
64
                }
 
65
        case "Failed Deployment":
 
66
                maasInstanceStatus = status.StatusProvisioningError
 
67
                if substatus != "" {
 
68
                        statusMsg = fmt.Sprintf("%s: %s", statusMsg, substatus)
 
69
                }
 
70
        default:
 
71
                maasInstanceStatus = status.StatusEmpty
 
72
                statusMsg = fmt.Sprintf("%s: %s", statusMsg, substatus)
 
73
        }
 
74
 
 
75
        return instance.InstanceStatus{
 
76
                Status:  maasInstanceStatus,
 
77
                Message: statusMsg,
 
78
        }
53
79
}
54
80
 
55
81
func (mi *maasInstance) Addresses() ([]network.Address, error) {
124
150
                return nil, errors.Annotate(err, "getting instance details")
125
151
        }
126
152
 
 
153
        subnetsMap, err := mi.environ.subnetToSpaceIds()
 
154
        if err != nil {
 
155
                return nil, errors.Trace(err)
 
156
        }
127
157
        // Get all the interface details and extract the addresses.
128
 
        interfaces, err := maasObjectNetworkInterfaces(&obj)
 
158
        interfaces, err := maasObjectNetworkInterfaces(&obj, subnetsMap)
129
159
        if err != nil {
130
160
                return nil, errors.Trace(err)
131
161
        }