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