github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/apiserver/addresser/state.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package addresser
     5  
     6  import (
     7  	"github.com/juju/juju/environs/config"
     8  	"github.com/juju/juju/instance"
     9  	"github.com/juju/juju/network"
    10  	"github.com/juju/juju/state"
    11  )
    12  
    13  // StateIPAddress defines the needed methods of state.IPAddress
    14  // for the work of the Addresser API.
    15  type StateIPAddress interface {
    16  	state.Entity
    17  	state.EnsureDeader
    18  	state.Remover
    19  
    20  	Value() string
    21  	Life() state.Life
    22  	SubnetId() string
    23  	InstanceId() instance.Id
    24  	Address() network.Address
    25  	MACAddress() string
    26  }
    27  
    28  // StateInterface defines the needed methods of state.State
    29  // for the work of the Addresser API.
    30  type StateInterface interface {
    31  	// ModelConfig retrieves the model configuration.
    32  	ModelConfig() (*config.Config, error)
    33  
    34  	// DeadIPAddresses retrieves all dead IP addresses.
    35  	DeadIPAddresses() ([]StateIPAddress, error)
    36  
    37  	// IPAddress retrieves an IP address by its value.
    38  	IPAddress(value string) (StateIPAddress, error)
    39  
    40  	// WatchIPAddresses notifies about lifecycle changes
    41  	// of IP addresses.
    42  	WatchIPAddresses() state.StringsWatcher
    43  }
    44  
    45  type stateShim struct {
    46  	*state.State
    47  }
    48  
    49  func (s stateShim) DeadIPAddresses() ([]StateIPAddress, error) {
    50  	ipAddresses, err := s.State.DeadIPAddresses()
    51  	if err != nil {
    52  		return nil, err
    53  	}
    54  	// Convert []*state.IPAddress into []StateIPAddress. Direct
    55  	// casts of complete slices are not possible.
    56  	stateIPAddresses := make([]StateIPAddress, len(ipAddresses))
    57  	for i, ipAddress := range ipAddresses {
    58  		stateIPAddresses[i] = StateIPAddress(ipAddress)
    59  	}
    60  	return stateIPAddresses, nil
    61  }
    62  
    63  func (s stateShim) IPAddress(value string) (StateIPAddress, error) {
    64  	return s.State.IPAddress(value)
    65  }
    66  
    67  var getState = func(st *state.State) StateInterface {
    68  	return stateShim{st}
    69  }