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 }