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  }