github.com/cilium/cilium@v1.16.2/pkg/ipam/cell/cell.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package ipamcell
     5  
     6  import (
     7  	"github.com/cilium/hive/cell"
     8  
     9  	ipamrestapi "github.com/cilium/cilium/api/v1/server/restapi/ipam"
    10  	"github.com/cilium/cilium/daemon/k8s"
    11  	datapathOption "github.com/cilium/cilium/pkg/datapath/option"
    12  	datapathTypes "github.com/cilium/cilium/pkg/datapath/types"
    13  	"github.com/cilium/cilium/pkg/endpointmanager"
    14  	"github.com/cilium/cilium/pkg/ipam"
    15  	ipamapi "github.com/cilium/cilium/pkg/ipam/api"
    16  	ipamMetadata "github.com/cilium/cilium/pkg/ipam/metadata"
    17  	k8sClient "github.com/cilium/cilium/pkg/k8s/client"
    18  	"github.com/cilium/cilium/pkg/k8s/watchers"
    19  	"github.com/cilium/cilium/pkg/mtu"
    20  	"github.com/cilium/cilium/pkg/node"
    21  	"github.com/cilium/cilium/pkg/nodediscovery"
    22  	"github.com/cilium/cilium/pkg/option"
    23  )
    24  
    25  // Cell provides access to the IP address management
    26  var Cell = cell.Module(
    27  	"ipam",
    28  	"IP Address Management",
    29  
    30  	cell.Provide(newIPAddressManager),
    31  	cell.Provide(newIPAMAPIHandler),
    32  
    33  	// IPAM metadata manager, determines which IPAM pool a pod should allocate from
    34  	ipamMetadata.Cell,
    35  )
    36  
    37  type ipamParams struct {
    38  	cell.In
    39  
    40  	AgentConfig *option.DaemonConfig
    41  
    42  	NodeAddressing      datapathTypes.NodeAddressing
    43  	LocalNodeStore      *node.LocalNodeStore
    44  	K8sEventReporter    *watchers.K8sEventReporter
    45  	NodeResource        k8s.LocalCiliumNodeResource
    46  	MTU                 mtu.MTU
    47  	Clientset           k8sClient.Clientset
    48  	IPAMMetadataManager ipamMetadata.Manager
    49  	NodeDiscovery       *nodediscovery.NodeDiscovery
    50  }
    51  
    52  func newIPAddressManager(params ipamParams) *ipam.IPAM {
    53  	return ipam.NewIPAM(params.NodeAddressing, params.AgentConfig, params.NodeDiscovery, params.LocalNodeStore, params.K8sEventReporter, params.NodeResource, params.MTU, params.Clientset, params.IPAMMetadataManager)
    54  }
    55  
    56  type ipamAPIHandlerParams struct {
    57  	cell.In
    58  
    59  	IPAM            *ipam.IPAM
    60  	EndpointManager endpointmanager.EndpointManager
    61  }
    62  
    63  type ipamAPIHandlerOut struct {
    64  	cell.Out
    65  
    66  	IpamDeleteIpamIPHandler ipamrestapi.DeleteIpamIPHandler
    67  	IpamPostIpamHandler     ipamrestapi.PostIpamHandler
    68  	IpamPostIpamIPHandler   ipamrestapi.PostIpamIPHandler
    69  }
    70  
    71  func newIPAMAPIHandler(params ipamAPIHandlerParams) ipamAPIHandlerOut {
    72  	if option.Config.DatapathMode == datapathOption.DatapathModeLBOnly {
    73  		return ipamAPIHandlerOut{}
    74  	}
    75  
    76  	return ipamAPIHandlerOut{
    77  		IpamDeleteIpamIPHandler: &ipamapi.IpamDeleteIpamIPHandler{
    78  			IPAM:            params.IPAM,
    79  			EndpointManager: params.EndpointManager,
    80  		},
    81  		IpamPostIpamHandler: &ipamapi.IpamPostIpamHandler{
    82  			IPAM: params.IPAM,
    83  		},
    84  		IpamPostIpamIPHandler: &ipamapi.IpamPostIpamIPHandler{
    85  			IPAM: params.IPAM,
    86  		},
    87  	}
    88  }