github.com/cilium/cilium@v1.16.2/operator/pkg/lbipam/cell.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package lbipam 5 6 import ( 7 "context" 8 9 "github.com/cilium/hive/cell" 10 "github.com/cilium/hive/job" 11 "github.com/sirupsen/logrus" 12 13 cilium_api_v2alpha1 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2alpha1" 14 k8sClient "github.com/cilium/cilium/pkg/k8s/client" 15 "github.com/cilium/cilium/pkg/k8s/resource" 16 slim_core_v1 "github.com/cilium/cilium/pkg/k8s/slim/k8s/api/core/v1" 17 "github.com/cilium/cilium/pkg/metrics" 18 "github.com/cilium/cilium/pkg/option" 19 ) 20 21 var Cell = cell.Module( 22 "lbipam", 23 "LB-IPAM", 24 // Provide LBIPAM so instances of it can be used while testing 25 cell.Provide(newLBIPAMCell), 26 // Invoke an empty function which takes an LBIPAM to force its construction. 27 cell.Invoke(func(*LBIPAM) {}), 28 // Provide LB-IPAM related metrics 29 metrics.Metric(newMetrics), 30 ) 31 32 type lbipamCellParams struct { 33 cell.In 34 35 Logger logrus.FieldLogger 36 37 LC cell.Lifecycle 38 JobGroup job.Group 39 Health cell.Health 40 41 Clientset k8sClient.Clientset 42 PoolResource resource.Resource[*cilium_api_v2alpha1.CiliumLoadBalancerIPPool] 43 SvcResource resource.Resource[*slim_core_v1.Service] 44 45 DaemonConfig *option.DaemonConfig 46 47 Metrics *ipamMetrics 48 } 49 50 func newLBIPAMCell(params lbipamCellParams) *LBIPAM { 51 if !params.Clientset.IsEnabled() { 52 return nil 53 } 54 55 var lbClasses []string 56 if params.DaemonConfig.EnableBGPControlPlane { 57 lbClasses = append(lbClasses, cilium_api_v2alpha1.BGPLoadBalancerClass) 58 } 59 60 if params.DaemonConfig.EnableL2Announcements { 61 lbClasses = append(lbClasses, cilium_api_v2alpha1.L2AnnounceLoadBalancerClass) 62 } 63 64 lbIPAM := newLBIPAM(lbIPAMParams{ 65 logger: params.Logger, 66 poolResource: params.PoolResource, 67 svcResource: params.SvcResource, 68 metrics: params.Metrics, 69 lbClasses: lbClasses, 70 ipv4Enabled: option.Config.IPv4Enabled(), 71 ipv6Enabled: option.Config.IPv6Enabled(), 72 poolClient: params.Clientset.CiliumV2alpha1().CiliumLoadBalancerIPPools(), 73 svcClient: params.Clientset.Slim().CoreV1(), 74 jobGroup: params.JobGroup, 75 }) 76 77 lbIPAM.jobGroup.Add( 78 job.OneShot("lbipam main", func(ctx context.Context, health cell.Health) error { 79 lbIPAM.Run(ctx, health) 80 return nil 81 }), 82 ) 83 84 return lbIPAM 85 }