diff --git a/test/infrastructure/docker/exp/internal/controllers/dockermachinepool_controller.go b/test/infrastructure/docker/exp/internal/controllers/dockermachinepool_controller.go index f84e0b7ec1ab..f0d92f367aae 100644 --- a/test/infrastructure/docker/exp/internal/controllers/dockermachinepool_controller.go +++ b/test/infrastructure/docker/exp/internal/controllers/dockermachinepool_controller.go @@ -96,6 +96,18 @@ func (r *DockerMachinePoolReconciler) Reconcile(ctx context.Context, req ctrl.Re return ctrl.Result{}, err } if machinePool == nil { + // Note: If ownerRef was not set, there is nothing to delete. Remove finalizer so deletion can succeed. + if !dockerMachinePool.DeletionTimestamp.IsZero() { + if controllerutil.ContainsFinalizer(dockerMachinePool, infraexpv1.MachinePoolFinalizer) { + dockerMachinePoolWithoutFinalizer := dockerMachinePool.DeepCopy() + controllerutil.RemoveFinalizer(dockerMachinePoolWithoutFinalizer, infraexpv1.MachinePoolFinalizer) + if err := r.Client.Patch(ctx, dockerMachinePoolWithoutFinalizer, client.MergeFrom(dockerMachinePool)); err != nil { + return ctrl.Result{}, errors.Wrapf(err, "failed to patch DockerMachinePool %s", klog.KObj(dockerMachinePool)) + } + } + return ctrl.Result{}, nil + } + log.Info("Waiting for MachinePool Controller to set OwnerRef on DockerMachinePool") return ctrl.Result{}, nil } diff --git a/test/infrastructure/docker/internal/controllers/devmachine_controller.go b/test/infrastructure/docker/internal/controllers/devmachine_controller.go index 1615d4359c59..3187ab35de13 100644 --- a/test/infrastructure/docker/internal/controllers/devmachine_controller.go +++ b/test/infrastructure/docker/internal/controllers/devmachine_controller.go @@ -28,6 +28,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/builder" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/handler" clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2" @@ -139,6 +140,17 @@ func (r *DevMachineReconciler) Reconcile(ctx context.Context, req ctrl.Request) return ctrl.Result{}, err } if machine == nil { + if !devMachine.DeletionTimestamp.IsZero() { + if controllerutil.ContainsFinalizer(devMachine, infrav1.MachineFinalizer) { + devMachineWithoutFinalizer := devMachine.DeepCopy() + controllerutil.RemoveFinalizer(devMachineWithoutFinalizer, infrav1.MachineFinalizer) + if err := r.Client.Patch(ctx, devMachineWithoutFinalizer, client.MergeFrom(devMachine)); err != nil { + return ctrl.Result{}, errors.Wrapf(err, "failed to patch DevMachine %s", klog.KObj(devMachine)) + } + } + return ctrl.Result{}, nil + } + log.Info("Waiting for Machine Controller to set OwnerRef on DevMachine") return ctrl.Result{}, nil } diff --git a/test/infrastructure/docker/internal/controllers/dockermachine_controller.go b/test/infrastructure/docker/internal/controllers/dockermachine_controller.go index 9aa37829c83a..edc9a3ddaf8b 100644 --- a/test/infrastructure/docker/internal/controllers/dockermachine_controller.go +++ b/test/infrastructure/docker/internal/controllers/dockermachine_controller.go @@ -28,6 +28,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/builder" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/handler" clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2" @@ -93,6 +94,18 @@ func (r *DockerMachineReconciler) Reconcile(ctx context.Context, req ctrl.Reques return ctrl.Result{}, err } if machine == nil { + // Note: If ownerRef was not set, there is nothing to delete. Remove finalizer so deletion can succeed. + if !dockerMachine.DeletionTimestamp.IsZero() { + if controllerutil.ContainsFinalizer(dockerMachine, infrav1.MachineFinalizer) { + dockerMachineWithoutFinalizer := dockerMachine.DeepCopy() + controllerutil.RemoveFinalizer(dockerMachineWithoutFinalizer, infrav1.MachineFinalizer) + if err := r.Client.Patch(ctx, dockerMachineWithoutFinalizer, client.MergeFrom(dockerMachine)); err != nil { + return ctrl.Result{}, errors.Wrapf(err, "failed to patch DockerMachine %s", klog.KObj(dockerMachine)) + } + } + return ctrl.Result{}, nil + } + log.Info("Waiting for Machine Controller to set OwnerRef on DockerMachine") return ctrl.Result{}, nil }