Skip to content

Commit 4688378

Browse files
committed
feat: Improve subnet and VPC finalizer handling
- Add finalizer to subnet and VPC resources if not present - Remove VPC finalizer when no subnets exist - Enhance VPC status management by adding subnets to queue when empty - Use slices.Contains for more idiomatic finalizer checks Signed-off-by: Mengxin Liu <[email protected]>
1 parent d8a4a05 commit 4688378

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

pkg/controller/subnet.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ func (c *Controller) syncSubnetFinalizer(cl client.Client) error {
361361
}
362362

363363
func (c *Controller) handleSubnetFinalizer(subnet *kubeovnv1.Subnet) (*kubeovnv1.Subnet, bool, error) {
364-
if subnet.DeletionTimestamp.IsZero() && len(subnet.GetFinalizers()) == 0 {
364+
if subnet.DeletionTimestamp.IsZero() && !slices.Contains(subnet.GetFinalizers(), util.KubeOVNControllerFinalizer) {
365365
newSubnet := subnet.DeepCopy()
366366
controllerutil.AddFinalizer(newSubnet, util.KubeOVNControllerFinalizer)
367367
patch, err := util.GenerateMergePatchPayload(subnet, newSubnet)

pkg/controller/vpc.go

+19
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"k8s.io/apimachinery/pkg/types"
2222
"k8s.io/client-go/tools/cache"
2323
"k8s.io/klog/v2"
24+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2425

2526
kubeovnv1 "github.com/kubeovn/kube-ovn/pkg/apis/kubeovn/v1"
2627
"github.com/kubeovn/kube-ovn/pkg/ovsdb/ovnnb"
@@ -156,6 +157,7 @@ func (c *Controller) handleUpdateVpcStatus(key string) error {
156157

157158
vpc.Status.DefaultLogicalSwitch = defaultSubnet
158159
vpc.Status.Subnets = subnets
160+
159161
if !vpc.Spec.BFDPort.IsEnabled() && !vpc.Status.BFDPort.IsEmpty() {
160162
vpc.Status.BFDPort.Clear()
161163
}
@@ -170,6 +172,12 @@ func (c *Controller) handleUpdateVpcStatus(key string) error {
170172
klog.Error(err)
171173
return err
172174
}
175+
176+
if len(vpc.Status.Subnets) == 0 {
177+
klog.Infof("vpc %s has no subnets, add to queue", vpc.Name)
178+
c.addOrUpdateVpcQueue.Add(vpc.Name)
179+
}
180+
173181
if change {
174182
for _, ns := range vpc.Spec.Namespaces {
175183
c.addNamespaceQueue.Add(ns)
@@ -262,6 +270,7 @@ func (c *Controller) handleAddOrUpdateVpc(key string) error {
262270
klog.Errorf("failed to format vpc %s: %v", key, err)
263271
return err
264272
}
273+
265274
if err = c.createVpcRouter(key); err != nil {
266275
klog.Errorf("failed to create vpc router for vpc %s: %v", key, err)
267276
return err
@@ -1094,6 +1103,16 @@ func (c *Controller) formatVpc(vpc *kubeovnv1.Vpc) (*kubeovnv1.Vpc, error) {
10941103
}
10951104
}
10961105

1106+
if vpc.DeletionTimestamp.IsZero() && !slices.Contains(vpc.GetFinalizers(), util.KubeOVNControllerFinalizer) {
1107+
controllerutil.AddFinalizer(vpc, util.KubeOVNControllerFinalizer)
1108+
changed = true
1109+
}
1110+
1111+
if !vpc.DeletionTimestamp.IsZero() && len(vpc.Status.Subnets) == 0 {
1112+
controllerutil.RemoveFinalizer(vpc, util.KubeOVNControllerFinalizer)
1113+
changed = true
1114+
}
1115+
10971116
if changed {
10981117
newVpc, err := c.config.KubeOvnClient.KubeovnV1().Vpcs().Update(context.Background(), vpc, metav1.UpdateOptions{})
10991118
if err != nil {

0 commit comments

Comments
 (0)