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 }