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 }