/
reuse_ip_pool.go
59 lines (53 loc) · 1.58 KB
/
reuse_ip_pool.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package ipcache
import (
"github.com/baidubce/baiducloud-cce-cni-driver/pkg/apimachinery/networking"
networkingv1alpha1 "github.com/baidubce/baiducloud-cce-cni-driver/pkg/apis/networking/v1alpha1"
"k8s.io/client-go/tools/cache"
)
type ReuseIPAndWepPool struct {
*CacheMap[*networkingv1alpha1.WorkloadEndpoint]
}
func NewReuseIPAndWepPool() *ReuseIPAndWepPool {
return &ReuseIPAndWepPool{
CacheMap: NewCacheMap[*networkingv1alpha1.WorkloadEndpoint](),
}
}
func (pool *ReuseIPAndWepPool) OnAdd(obj interface{}) {
wep, ok := obj.(*networkingv1alpha1.WorkloadEndpoint)
if ok {
if networking.ISCustomReuseModeWEP(wep) || networking.IsFixIPStatefulSetPodWep(wep) {
pool.CacheMap.Add(wep.Spec.IP, wep)
if wep.Spec.IPv6 != "" {
pool.CacheMap.Add(wep.Spec.IPv6, wep)
}
}
}
}
func (pool *ReuseIPAndWepPool) OnUpdate(oldObj, newObj interface{}) {
old, ok := oldObj.(*networkingv1alpha1.WorkloadEndpoint)
if ok {
pool.CacheMap.Delete(old.Spec.IP)
if old.Spec.IPv6 != "" {
pool.CacheMap.Delete(old.Spec.IPv6)
}
}
wep, ok := newObj.(*networkingv1alpha1.WorkloadEndpoint)
if ok {
if networking.ISCustomReuseModeWEP(wep) || networking.IsFixIPStatefulSetPodWep(wep) {
pool.CacheMap.Add(wep.Spec.IP, wep)
if wep.Spec.IPv6 != "" {
pool.CacheMap.Add(wep.Spec.IPv6, wep)
}
}
}
}
func (pool *ReuseIPAndWepPool) OnDelete(obj interface{}) {
old, ok := obj.(*networkingv1alpha1.WorkloadEndpoint)
if ok {
pool.CacheMap.Delete(old.Spec.IP)
if old.Spec.IPv6 != "" {
pool.CacheMap.Delete(old.Spec.IPv6)
}
}
}
var _ cache.ResourceEventHandler = &ReuseIPAndWepPool{}