From 99fbd3c593a9966e33f02cbb33dfdb0cccdaa13d Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Thu, 29 May 2025 18:59:14 -0400 Subject: [PATCH 1/4] Adding a finalizer to vsp-p4 so that it is not immediately destroyed * It will wait for the finalizer to be removed. This lets the P4 delete options go through before it is taken down Signed-off-by: Sayan Bandyopadhyay --- .../infrapod/bindata/vsp-p4/99.vsp_p4.yaml | 2 ++ ipu-plugin/pkg/infrapod/infrapod.go | 27 +++++++++++++++++++ ipu-plugin/pkg/types/types.go | 1 + 3 files changed, 30 insertions(+) diff --git a/ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml b/ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml index fe38fd6e..97e7e05d 100644 --- a/ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml +++ b/ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml @@ -3,6 +3,8 @@ kind: DaemonSet metadata: name: vsp-p4 namespace: {{.Namespace}} + finalizers: + - waitForP4Deletion spec: selector: matchLabels: diff --git a/ipu-plugin/pkg/infrapod/infrapod.go b/ipu-plugin/pkg/infrapod/infrapod.go index 8fbdba1c..6648f5bf 100644 --- a/ipu-plugin/pkg/infrapod/infrapod.go +++ b/ipu-plugin/pkg/infrapod/infrapod.go @@ -25,6 +25,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "k8s.io/client-go/rest" ) @@ -146,6 +147,28 @@ func (infrapodMgr *InfrapodMgrOcImpl) StartMgr() error { } return nil } +// RemoveDsFinalizer removes a specific finalizer from vsp-p4 DS. +func (infrapodMgr *InfrapodMgrOcImpl) RemoveDsFinalizer() error { + obj := client.ObjectKey{Namespace: infrapodMgr.vspP4Template.Namespace, Name: "vsp-p4"} + ds := &appsv1.DaemonSet{} + + if err := infrapodMgr.mgr.GetClient().Get(context.TODO(), obj, ds); err != nil { + return fmt.Errorf("failed to get DS '%s/%s': %w", infrapodMgr.vspP4Template.Namespace, "vsp-p4", err) + } + finalizerName := "waitForP4Deletion" + updated := controllerutil.RemoveFinalizer(ds, finalizerName) + if updated { + if err := infrapodMgr.mgr.GetClient().Update(context.TODO(), ds); err != nil { + return fmt.Errorf("failed to update DS vsp-p4 to remove finalizer '%s': %w", finalizerName, err) + } + fmt.Printf("Successfully removed finalizer '%s' from DS vsp-p4 \n", finalizerName) + } else { + fmt.Printf("Finalizer '%s' not found on Pod vsp-p4\n", finalizerName) + } + + return nil +} + /* * Get PV and PVC. It returns false if it is not present and true if it does @@ -217,6 +240,10 @@ service for p4runtime P4 pod */ func (infrapodMgr *InfrapodMgrOcImpl) DeleteCrs() error { + if err := infrapodMgr.RemoveDsFinalizer(); err != nil { + infrapodMgr.log.Error(err, "unable to Delete Finalizer from vsp-p4 pod : %v", err) + return err + } err := render.OperateAllFromBinData(infrapodMgr.log, "vsp-p4", infrapodMgr.vspP4Template.ToMap(), binData, infrapodMgr.mgr.GetClient(), nil, infrapodMgr.mgr.GetScheme(), true) diff --git a/ipu-plugin/pkg/types/types.go b/ipu-plugin/pkg/types/types.go index 3743aab7..d7fdc6b9 100644 --- a/ipu-plugin/pkg/types/types.go +++ b/ipu-plugin/pkg/types/types.go @@ -80,6 +80,7 @@ type P4RTClient interface { type InfrapodMgr interface { StartMgr() error + RemoveDsFinalizer() error CreateCrs() error CreatePvCrs() error DeleteCrs() error From c055a4f1542e227e2aa89714d86737c87a867e4b Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 30 May 2025 12:57:36 -0400 Subject: [PATCH 2/4] Adding finalizer Signed-off-by: Sayan Bandyopadhyay --- ipu-plugin/pkg/infrapod/infrapod.go | 6 ++++-- ipu-plugin/pkg/ipuplugin/ipuplugin.go | 4 ++-- ipu-plugin/pkg/types/types.go | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ipu-plugin/pkg/infrapod/infrapod.go b/ipu-plugin/pkg/infrapod/infrapod.go index 6648f5bf..966422be 100644 --- a/ipu-plugin/pkg/infrapod/infrapod.go +++ b/ipu-plugin/pkg/infrapod/infrapod.go @@ -239,10 +239,12 @@ rolebindings service for p4runtime P4 pod */ -func (infrapodMgr *InfrapodMgrOcImpl) DeleteCrs() error { +func (infrapodMgr *InfrapodMgrOcImpl) DeleteCrs(ignoreFinalizer bool) error { if err := infrapodMgr.RemoveDsFinalizer(); err != nil { infrapodMgr.log.Error(err, "unable to Delete Finalizer from vsp-p4 pod : %v", err) - return err + if !ignoreFinalizer { + return err + } } err := render.OperateAllFromBinData(infrapodMgr.log, "vsp-p4", infrapodMgr.vspP4Template.ToMap(), binData, infrapodMgr.mgr.GetClient(), diff --git a/ipu-plugin/pkg/ipuplugin/ipuplugin.go b/ipu-plugin/pkg/ipuplugin/ipuplugin.go index 70820468..54a50370 100644 --- a/ipu-plugin/pkg/ipuplugin/ipuplugin.go +++ b/ipu-plugin/pkg/ipuplugin/ipuplugin.go @@ -169,7 +169,7 @@ func (s *server) Run() error { syscall.Kill(syscall.Getpid(), syscall.SIGTERM) } }() - if err = s.infrapodMgr.DeleteCrs(); err != nil { + if err = s.infrapodMgr.DeleteCrs(true); err != nil { log.Error(err, "unable to Delete Crs : %v", err) return err } @@ -258,7 +258,7 @@ func (s *server) Stop() { s.bridgeCtlr.DeleteBridges() // Delete P4 rules on exit cleanUpRulesOnExit(s.p4rtClient) - if err := s.infrapodMgr.DeleteCrs(); err != nil { + if err := s.infrapodMgr.DeleteCrs(false); err != nil { log.Error(err, "unable to Delete Crs : %v", err) // Do not return since we continue on error } diff --git a/ipu-plugin/pkg/types/types.go b/ipu-plugin/pkg/types/types.go index d7fdc6b9..5a6c6874 100644 --- a/ipu-plugin/pkg/types/types.go +++ b/ipu-plugin/pkg/types/types.go @@ -83,7 +83,7 @@ type InfrapodMgr interface { RemoveDsFinalizer() error CreateCrs() error CreatePvCrs() error - DeleteCrs() error + DeleteCrs(ignoreFinalizer bool) error WaitForPodDelete(timeout time.Duration) error WaitForPodReady(timeout time.Duration) error } From 547a648c284e08d2c6f7e30bd79e58e2625f3215 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 30 May 2025 13:32:46 -0400 Subject: [PATCH 3/4] finalizer change to intel.com Signed-off-by: Sayan Bandyopadhyay --- ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml b/ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml index 97e7e05d..f7890139 100644 --- a/ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml +++ b/ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml @@ -4,7 +4,7 @@ metadata: name: vsp-p4 namespace: {{.Namespace}} finalizers: - - waitForP4Deletion + - intel.com/waitForP4Deletion spec: selector: matchLabels: From 45fb19ca165b5dd56f69c32fcd35b6693b892782 Mon Sep 17 00:00:00 2001 From: Sayan Bandyopadhyay Date: Fri, 30 May 2025 17:55:13 -0400 Subject: [PATCH 4/4] correcting finalizer name Signed-off-by: Sayan Bandyopadhyay --- ipu-plugin/pkg/infrapod/infrapod.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ipu-plugin/pkg/infrapod/infrapod.go b/ipu-plugin/pkg/infrapod/infrapod.go index 966422be..5ce479d2 100644 --- a/ipu-plugin/pkg/infrapod/infrapod.go +++ b/ipu-plugin/pkg/infrapod/infrapod.go @@ -155,7 +155,7 @@ func (infrapodMgr *InfrapodMgrOcImpl) RemoveDsFinalizer() error { if err := infrapodMgr.mgr.GetClient().Get(context.TODO(), obj, ds); err != nil { return fmt.Errorf("failed to get DS '%s/%s': %w", infrapodMgr.vspP4Template.Namespace, "vsp-p4", err) } - finalizerName := "waitForP4Deletion" + finalizerName := "intel.com/waitForP4Deletion" updated := controllerutil.RemoveFinalizer(ds, finalizerName) if updated { if err := infrapodMgr.mgr.GetClient().Update(context.TODO(), ds); err != nil {