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

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package multipool
     5  
     6  import (
     7  	"context"
     8  
     9  	"github.com/sirupsen/logrus"
    10  
    11  	"github.com/cilium/cilium/pkg/ipam"
    12  	"github.com/cilium/cilium/pkg/ipam/allocator"
    13  	cilium_v2alpha1 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2alpha1"
    14  	"github.com/cilium/cilium/pkg/logging"
    15  	"github.com/cilium/cilium/pkg/logging/logfields"
    16  )
    17  
    18  var log = logging.DefaultLogger.WithField(logfields.LogSubsys, "ipam-allocator-multi-pool")
    19  
    20  // Allocator implements allocator.AllocatorProvider
    21  type Allocator struct {
    22  	poolAlloc *PoolAllocator
    23  }
    24  
    25  func (a *Allocator) Init(ctx context.Context) error {
    26  	a.poolAlloc = NewPoolAllocator()
    27  	return nil
    28  }
    29  
    30  func (a *Allocator) Start(ctx context.Context, getterUpdater ipam.CiliumNodeGetterUpdater) (allocator.NodeEventHandler, error) {
    31  	return NewNodeHandler(a.poolAlloc, getterUpdater), nil
    32  }
    33  
    34  func (a *Allocator) UpsertPool(ctx context.Context, pool *cilium_v2alpha1.CiliumPodIPPool) error {
    35  	var ipv4CIDRs, ipv6CIDRs []string
    36  	var ipv4MaskSize, ipv6MaskSize int
    37  
    38  	if pool.Spec.IPv4 != nil {
    39  		ipv4MaskSize = int(pool.Spec.IPv4.MaskSize)
    40  		ipv4CIDRs = make([]string, len(pool.Spec.IPv4.CIDRs))
    41  		for i, cidr := range pool.Spec.IPv4.CIDRs {
    42  			ipv4CIDRs[i] = string(cidr)
    43  		}
    44  	}
    45  
    46  	if pool.Spec.IPv6 != nil {
    47  		ipv6MaskSize = int(pool.Spec.IPv6.MaskSize)
    48  		ipv6CIDRs = make([]string, len(pool.Spec.IPv6.CIDRs))
    49  		for i, cidr := range pool.Spec.IPv6.CIDRs {
    50  			ipv6CIDRs[i] = string(cidr)
    51  		}
    52  	}
    53  
    54  	log.WithFields(logrus.Fields{
    55  		"pool-name":      pool.Name,
    56  		"ipv4-cidrs":     ipv4CIDRs,
    57  		"ipv4-mask-size": ipv4MaskSize,
    58  		"ipv6-cidrs":     ipv6CIDRs,
    59  		"ipv6-mask-size": ipv6MaskSize,
    60  	}).Debug("upserting pool")
    61  
    62  	return a.poolAlloc.UpsertPool(
    63  		pool.Name,
    64  		ipv4CIDRs,
    65  		ipv4MaskSize,
    66  		ipv6CIDRs,
    67  		ipv6MaskSize,
    68  	)
    69  }
    70  
    71  func (a *Allocator) DeletePool(ctx context.Context, pool *cilium_v2alpha1.CiliumPodIPPool) error {
    72  	log.WithFields(logrus.Fields{
    73  		"pool-name": pool.Name,
    74  	}).Debug("deleting pool")
    75  
    76  	return a.poolAlloc.DeletePool(pool.Name)
    77  }