github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/container/lxd/instance.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 // +build go1.3 5 6 package lxd 7 8 import ( 9 "fmt" 10 11 "github.com/juju/errors" 12 13 "github.com/juju/juju/instance" 14 "github.com/juju/juju/network" 15 "github.com/juju/juju/status" 16 "github.com/juju/juju/tools/lxdclient" 17 ) 18 19 type lxdInstance struct { 20 id string 21 client *lxdclient.Client 22 } 23 24 var _ instance.Instance = (*lxdInstance)(nil) 25 26 // Id implements instance.Instance.Id. 27 func (lxd *lxdInstance) Id() instance.Id { 28 return instance.Id(lxd.id) 29 } 30 31 func (*lxdInstance) Refresh() error { 32 return nil 33 } 34 35 func (lxd *lxdInstance) Addresses() ([]network.Address, error) { 36 return nil, errors.NotImplementedf("lxdInstance.Addresses") 37 } 38 39 // Status implements instance.Instance.Status. 40 func (lxd *lxdInstance) Status() instance.InstanceStatus { 41 jujuStatus := status.StatusPending 42 instStatus, err := lxd.client.Status(lxd.id) 43 if err != nil { 44 return instance.InstanceStatus{ 45 Status: status.StatusEmpty, 46 Message: fmt.Sprintf("could not get status: %v", err), 47 } 48 } 49 switch instStatus { 50 case lxdclient.StatusStarting, lxdclient.StatusStarted: 51 jujuStatus = status.StatusAllocating 52 case lxdclient.StatusRunning: 53 jujuStatus = status.StatusRunning 54 case lxdclient.StatusFreezing, lxdclient.StatusFrozen, lxdclient.StatusThawed, lxdclient.StatusStopping, lxdclient.StatusStopped: 55 jujuStatus = status.StatusEmpty 56 default: 57 jujuStatus = status.StatusEmpty 58 } 59 return instance.InstanceStatus{ 60 Status: jujuStatus, 61 Message: instStatus, 62 } 63 } 64 65 // OpenPorts implements instance.Instance.OpenPorts. 66 func (lxd *lxdInstance) OpenPorts(machineId string, ports []network.PortRange) error { 67 return fmt.Errorf("not implemented") 68 } 69 70 // ClosePorts implements instance.Instance.ClosePorts. 71 func (lxd *lxdInstance) ClosePorts(machineId string, ports []network.PortRange) error { 72 return fmt.Errorf("not implemented") 73 } 74 75 // Ports implements instance.Instance.Ports. 76 func (lxd *lxdInstance) Ports(machineId string) ([]network.PortRange, error) { 77 return nil, fmt.Errorf("not implemented") 78 } 79 80 // Add a string representation of the id. 81 func (lxd *lxdInstance) String() string { 82 return fmt.Sprintf("lxd:%s", lxd.id) 83 }