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