1
// Copyright 2013 Joyent Inc.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/joyent/gosdc/cloudapi"
9
"github.com/juju/juju/instance"
10
"github.com/juju/juju/network"
11
"github.com/juju/juju/status"
14
type joyentInstance struct {
15
machine *cloudapi.Machine
19
var _ instance.Instance = (*joyentInstance)(nil)
21
func (inst *joyentInstance) Id() instance.Id {
22
return instance.Id(inst.machine.Id)
25
func (inst *joyentInstance) Status() instance.InstanceStatus {
26
instStatus := inst.machine.State
27
jujuStatus := status.StatusPending
29
case "configured", "incomplete", "unavailable", "provisioning":
30
jujuStatus = status.StatusAllocating
31
case "ready", "running":
32
jujuStatus = status.StatusRunning
33
case "halting", "stopping", "shutting_down", "off", "down", "installed", "stopped", "destroyed", "unreachable":
34
jujuStatus = status.StatusEmpty
36
jujuStatus = status.StatusProvisioningError
38
jujuStatus = status.StatusEmpty
40
return instance.InstanceStatus{
46
func (inst *joyentInstance) Addresses() ([]network.Address, error) {
47
addresses := make([]network.Address, 0, len(inst.machine.IPs))
48
for _, ip := range inst.machine.IPs {
49
address := network.NewAddress(ip)
50
if ip == inst.machine.PrimaryIP {
51
address.Scope = network.ScopePublic
53
address.Scope = network.ScopeCloudLocal
55
addresses = append(addresses, address)