github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/lxd/instance.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package lxd 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/lxc/lxd/shared/api" 9 10 "github.com/juju/juju/container/lxd" 11 "github.com/juju/juju/core/instance" 12 "github.com/juju/juju/core/status" 13 "github.com/juju/juju/environs/context" 14 "github.com/juju/juju/environs/instances" 15 "github.com/juju/juju/network" 16 ) 17 18 type environInstance struct { 19 container *lxd.Container 20 env *environ 21 } 22 23 var _ instances.Instance = (*environInstance)(nil) 24 25 func newInstance(container *lxd.Container, env *environ) *environInstance { 26 return &environInstance{ 27 container: container, 28 env: env, 29 } 30 } 31 32 // Id implements instances.Instance. 33 func (i *environInstance) Id() instance.Id { 34 return instance.Id(i.container.Name) 35 } 36 37 // Status implements instances.Instance. 38 func (i *environInstance) Status(ctx context.ProviderCallContext) instance.Status { 39 jujuStatus := status.Pending 40 code := i.container.StatusCode 41 switch code { 42 case api.Starting, api.Started: 43 jujuStatus = status.Allocating 44 case api.Running: 45 jujuStatus = status.Running 46 case api.Freezing, api.Frozen, api.Thawed, api.Stopping, api.Stopped: 47 jujuStatus = status.Empty 48 default: 49 jujuStatus = status.Empty 50 } 51 return instance.Status{ 52 Status: jujuStatus, 53 Message: code.String(), 54 } 55 56 } 57 58 // Addresses implements instances.Instance. 59 func (i *environInstance) Addresses(_ context.ProviderCallContext) ([]network.Address, error) { 60 addrs, err := i.env.server.ContainerAddresses(i.container.Name) 61 return addrs, errors.Trace(err) 62 }