13
13
"github.com/juju/juju/instance"
14
14
"github.com/juju/juju/network"
15
"github.com/juju/juju/status"
17
18
type maasInstance struct {
18
maasObject *gomaasapi.MAASObject
19
maasObject *gomaasapi.MAASObject
21
statusGetter func(instance.Id) (string, string)
21
24
var _ instance.Instance = (*maasInstance)(nil)
43
46
return instance.Id(maasObject.URI().String())
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.
49
// Status returns a juju status based on the maas instance returned
51
func (mi *maasInstance) Status() instance.InstanceStatus {
52
maasInstanceStatus := status.StatusEmpty
53
statusMsg, substatus := mi.statusGetter(mi.Id())
56
logger.Debugf("unable to obtain status of instance %s", mi.Id())
57
statusMsg = "error in getting status"
59
maasInstanceStatus = status.StatusRunning
61
maasInstanceStatus = status.StatusAllocating
63
statusMsg = fmt.Sprintf("%s: %s", statusMsg, substatus)
65
case "Failed Deployment":
66
maasInstanceStatus = status.StatusProvisioningError
68
statusMsg = fmt.Sprintf("%s: %s", statusMsg, substatus)
71
maasInstanceStatus = status.StatusEmpty
72
statusMsg = fmt.Sprintf("%s: %s", statusMsg, substatus)
75
return instance.InstanceStatus{
76
Status: maasInstanceStatus,
55
81
func (mi *maasInstance) Addresses() ([]network.Address, error) {
124
150
return nil, errors.Annotate(err, "getting instance details")
153
subnetsMap, err := mi.environ.subnetToSpaceIds()
155
return nil, errors.Trace(err)
127
157
// Get all the interface details and extract the addresses.
128
interfaces, err := maasObjectNetworkInterfaces(&obj)
158
interfaces, err := maasObjectNetworkInterfaces(&obj, subnetsMap)
130
160
return nil, errors.Trace(err)