github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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/core/instance" 10 "github.com/juju/juju/core/status" 11 "github.com/juju/juju/environs/context" 12 "github.com/juju/juju/environs/instances" 13 "github.com/juju/juju/network" 14 ) 15 16 type joyentInstance struct { 17 machine *cloudapi.Machine 18 env *joyentEnviron 19 } 20 21 var _ instances.Instance = (*joyentInstance)(nil) 22 23 func (inst *joyentInstance) Id() instance.Id { 24 return instance.Id(inst.machine.Id) 25 } 26 27 func (inst *joyentInstance) Status(ctx context.ProviderCallContext) instance.Status { 28 instStatus := inst.machine.State 29 jujuStatus := status.Pending 30 switch instStatus { 31 case "configured", "incomplete", "unavailable", "provisioning": 32 jujuStatus = status.Allocating 33 case "ready", "running": 34 jujuStatus = status.Running 35 case "halting", "stopping", "shutting_down", "off", "down", "installed", "stopped", "destroyed", "unreachable": 36 jujuStatus = status.Empty 37 case "failed": 38 jujuStatus = status.ProvisioningError 39 default: 40 jujuStatus = status.Empty 41 } 42 return instance.Status{ 43 Status: jujuStatus, 44 Message: instStatus, 45 } 46 } 47 48 func (inst *joyentInstance) Addresses(ctx context.ProviderCallContext) ([]network.Address, error) { 49 addresses := make([]network.Address, 0, len(inst.machine.IPs)) 50 for _, ip := range inst.machine.IPs { 51 address := network.NewAddress(ip) 52 if ip == inst.machine.PrimaryIP { 53 address.Scope = network.ScopePublic 54 } else { 55 address.Scope = network.ScopeCloudLocal 56 } 57 addresses = append(addresses, address) 58 } 59 60 return addresses, nil 61 }