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  }