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  }