github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/provider/joyent/instance.go (about) 1 // Copyright 2013 Joyent Inc. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package joyent 5 6 import ( 7 "github.com/joyent/gosdc/cloudapi" 8 9 "github.com/juju/juju/instance" 10 "github.com/juju/juju/network" 11 "github.com/juju/juju/status" 12 ) 13 14 type joyentInstance struct { 15 machine *cloudapi.Machine 16 env *joyentEnviron 17 } 18 19 var _ instance.Instance = (*joyentInstance)(nil) 20 21 func (inst *joyentInstance) Id() instance.Id { 22 return instance.Id(inst.machine.Id) 23 } 24 25 func (inst *joyentInstance) Status() instance.InstanceStatus { 26 instStatus := inst.machine.State 27 jujuStatus := status.Pending 28 switch instStatus { 29 case "configured", "incomplete", "unavailable", "provisioning": 30 jujuStatus = status.Allocating 31 case "ready", "running": 32 jujuStatus = status.Running 33 case "halting", "stopping", "shutting_down", "off", "down", "installed", "stopped", "destroyed", "unreachable": 34 jujuStatus = status.Empty 35 case "failed": 36 jujuStatus = status.ProvisioningError 37 default: 38 jujuStatus = status.Empty 39 } 40 return instance.InstanceStatus{ 41 Status: jujuStatus, 42 Message: instStatus, 43 } 44 } 45 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 52 } else { 53 address.Scope = network.ScopeCloudLocal 54 } 55 addresses = append(addresses, address) 56 } 57 58 return addresses, nil 59 }