diff --git a/cmd/nvidia-dra-imex-controller/computedomain.go b/cmd/nvidia-dra-imex-controller/computedomain.go index bd2acebe..ca02f55c 100644 --- a/cmd/nvidia-dra-imex-controller/computedomain.go +++ b/cmd/nvidia-dra-imex-controller/computedomain.go @@ -167,6 +167,10 @@ func (m *ComputeDomainManager) RemoveFinalizer(ctx context.Context, uid string) return fmt.Errorf("error retrieving ComputeDomain: %w", err) } + if cd.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before ComputeDomain marked for deletion") + } + newCD := cd.DeepCopy() newCD.Finalizers = []string{} for _, f := range cd.Finalizers { @@ -210,20 +214,34 @@ func (m *ComputeDomainManager) onAddOrUpdate(ctx context.Context, obj any) error klog.Infof("Processing added or updated ComputeDomain: %s/%s", cd.Namespace, cd.Name) if cd.GetDeletionTimestamp() != nil { - if err := m.deploymentManager.Delete(ctx, string(cd.UID)); err != nil { - return fmt.Errorf("error deleting Deployment: %w", err) + if err := m.resourceClaimManager.Delete(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting ResourceClaim: %w", err) } if err := m.deviceClassManager.Delete(ctx, string(cd.UID)); err != nil { return fmt.Errorf("error deleting DeviceClass: %w", err) } - if err := m.resourceClaimManager.Delete(ctx, string(cd.UID)); err != nil { - return fmt.Errorf("error deleting ResourceClaim: %w", err) + if err := m.deploymentManager.Delete(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting Deployment: %w", err) } - if err := m.RemoveFinalizer(ctx, string(cd.UID)); err != nil { - return fmt.Errorf("error removing finalizer: %w", err) + if true { + if err := m.resourceClaimManager.RemoveFinalizer(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting ResourceClaim: %w", err) + } + + if err := m.deviceClassManager.RemoveFinalizer(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting DeviceClass: %w", err) + } + + if err := m.deploymentManager.RemoveFinalizer(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error deleting Deployment: %w", err) + } + + if err := m.RemoveFinalizer(ctx, string(cd.UID)); err != nil { + return fmt.Errorf("error removing finalizer: %w", err) + } } return nil diff --git a/cmd/nvidia-dra-imex-controller/deployment.go b/cmd/nvidia-dra-imex-controller/deployment.go index 4e2dbac9..1595ee76 100644 --- a/cmd/nvidia-dra-imex-controller/deployment.go +++ b/cmd/nvidia-dra-imex-controller/deployment.go @@ -249,10 +249,6 @@ func (m *DeploymentManager) Delete(ctx context.Context, cdUID string) error { return fmt.Errorf("error deleting IMEX channel pool: %w", err) } - if err := m.RemoveFinalizer(ctx, cdUID); err != nil { - return fmt.Errorf("error removing finalizer on Deployment: %w", err) - } - if d.GetDeletionTimestamp() != nil { return nil } @@ -266,6 +262,16 @@ func (m *DeploymentManager) Delete(ctx context.Context, cdUID string) error { } func (m *DeploymentManager) RemoveFinalizer(ctx context.Context, cdUID string) error { + if err := m.resourceClaimTemplateManager.RemoveFinalizer(ctx, cdUID); err != nil { + return fmt.Errorf("error removing finalizer on ResourceClaimTemplate: %w", err) + } + if err := m.removeFinalizer(ctx, cdUID); err != nil { + return fmt.Errorf("error removing finalizer on Deployment: %w", err) + } + return nil +} + +func (m *DeploymentManager) removeFinalizer(ctx context.Context, cdUID string) error { ds, err := getByComputeDomainUID[*appsv1.Deployment](ctx, m.informer, cdUID) if err != nil { return fmt.Errorf("error retrieving Deployment: %w", err) @@ -279,6 +285,10 @@ func (m *DeploymentManager) RemoveFinalizer(ctx context.Context, cdUID string) e d := ds[0] + if d.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before Deployment marked for deletion") + } + newD := d.DeepCopy() newD.Finalizers = []string{} for _, f := range d.Finalizers { diff --git a/cmd/nvidia-dra-imex-controller/deviceclass.go b/cmd/nvidia-dra-imex-controller/deviceclass.go index 4069d634..8b8bedbb 100644 --- a/cmd/nvidia-dra-imex-controller/deviceclass.go +++ b/cmd/nvidia-dra-imex-controller/deviceclass.go @@ -172,10 +172,6 @@ func (m *DeviceClassManager) Delete(ctx context.Context, cdUID string) error { dc := dcs[0] - if err := m.RemoveFinalizer(ctx, cdUID); err != nil { - return fmt.Errorf("error removing finalizer on DeviceClass '%s': %w", dc.Name, err) - } - if dc.GetDeletionTimestamp() != nil { return nil } @@ -202,6 +198,10 @@ func (m *DeviceClassManager) RemoveFinalizer(ctx context.Context, cdUID string) dc := dcs[0] + if dc.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before DeviceClass marked for deletion") + } + newDC := dc.DeepCopy() newDC.Finalizers = []string{} for _, f := range dc.Finalizers { diff --git a/cmd/nvidia-dra-imex-controller/resourceclaim.go b/cmd/nvidia-dra-imex-controller/resourceclaim.go index 4b7f338e..d8bfecc1 100644 --- a/cmd/nvidia-dra-imex-controller/resourceclaim.go +++ b/cmd/nvidia-dra-imex-controller/resourceclaim.go @@ -151,10 +151,6 @@ func (m *ResourceClaimManager) Delete(ctx context.Context, cdUID string) error { return nil } - if err := m.RemoveFinalizer(ctx, cdUID); err != nil { - return fmt.Errorf("error removing finalizer on ResourceClaims': %w", err) - } - for _, rc := range rcs { if rc.GetDeletionTimestamp() != nil { continue @@ -179,6 +175,10 @@ func (m *ResourceClaimManager) RemoveFinalizer(ctx context.Context, cdUID string } for _, rc := range rcs { + if rc.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before ResoureClaim marked for deletion") + } + newRC := rc.DeepCopy() newRC.Finalizers = []string{} for _, f := range rc.Finalizers { diff --git a/cmd/nvidia-dra-imex-controller/resourceclaimtemplate.go b/cmd/nvidia-dra-imex-controller/resourceclaimtemplate.go index d7a9db7f..0ff77560 100644 --- a/cmd/nvidia-dra-imex-controller/resourceclaimtemplate.go +++ b/cmd/nvidia-dra-imex-controller/resourceclaimtemplate.go @@ -197,10 +197,6 @@ func (m *ResourceClaimTemplateManager) Delete(ctx context.Context, cdUID string) rct := rcts[0] - if err := m.RemoveFinalizer(ctx, cdUID); err != nil { - return fmt.Errorf("error removing finalizer on ResourceClaimTemplate '%s/%s': %w", rct.Namespace, rct.Name, err) - } - if rct.GetDeletionTimestamp() != nil { return nil } @@ -227,6 +223,10 @@ func (m *ResourceClaimTemplateManager) RemoveFinalizer(ctx context.Context, cdUI rct := rcts[0] + if rct.GetDeletionTimestamp() == nil { + return fmt.Errorf("attempting to remove finalizer before ResourceClaimTemplate marked for deletion") + } + newRCT := rct.DeepCopy() newRCT.Finalizers = []string{} for _, f := range rct.Finalizers {