github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/common/networkingcommon/shims.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package networkingcommon
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  
     9  	"github.com/juju/juju/state"
    10  )
    11  
    12  // linkLayerMachine wraps a state.Machine reference in order to
    13  // implement the LinkLayerMachine indirection.
    14  type linkLayerMachine struct {
    15  	*state.Machine
    16  }
    17  
    18  // AllLinkLayerDevices returns all layer-2 devices for the machine
    19  // as a slice of the LinkLayerDevice indirection.
    20  func (m *linkLayerMachine) AllLinkLayerDevices() ([]LinkLayerDevice, error) {
    21  	devList, err := m.Machine.AllLinkLayerDevices()
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  
    26  	out := make([]LinkLayerDevice, len(devList))
    27  	for i, dev := range devList {
    28  		out[i] = dev
    29  	}
    30  
    31  	return out, nil
    32  }
    33  
    34  // AllDeviceAddresses returns all layer-3 addresses for the machine
    35  // as a slice of the LinkLayerAddress indirection.
    36  func (m *linkLayerMachine) AllDeviceAddresses() ([]LinkLayerAddress, error) {
    37  	addrList, err := m.Machine.AllDeviceAddresses()
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	out := make([]LinkLayerAddress, len(addrList))
    43  	for i, addr := range addrList {
    44  		out[i] = addr
    45  	}
    46  
    47  	return out, nil
    48  }
    49  
    50  type linkLayerState struct {
    51  	*state.State
    52  }
    53  
    54  func (s *linkLayerState) Machine(id string) (LinkLayerMachine, error) {
    55  	m, err := s.State.Machine(id)
    56  	return &linkLayerMachine{m}, errors.Trace(err)
    57  }