Skip to content

Commit 351e031

Browse files
authored
fix: wait for cluster deletion until all machines are gone #67 (#77)
1 parent 3aa8cbb commit 351e031

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

internal/controller/metalstackcluster_controller.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
ctrllog "sigs.k8s.io/controller-runtime/pkg/log"
2929

3030
apierrors "k8s.io/apimachinery/pkg/api/errors"
31+
"k8s.io/apimachinery/pkg/labels"
3132
"k8s.io/utils/ptr"
3233

3334
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
@@ -179,6 +180,11 @@ func (r *clusterReconciler) delete() error {
179180

180181
r.log.Info("reconciling resource deletion flow")
181182

183+
err = r.ensureAllMetalStackMachinesAreGone()
184+
if err != nil {
185+
return err
186+
}
187+
182188
err = r.deleteControlPlaneIP()
183189
if err != nil {
184190
return fmt.Errorf("unable to delete control plane ip: %w", err)
@@ -231,6 +237,25 @@ func (r *clusterReconciler) ensureControlPlaneIP() (string, error) {
231237
return *resp.Payload.Ipaddress, nil
232238
}
233239

240+
func (r *clusterReconciler) ensureAllMetalStackMachinesAreGone() error {
241+
infraMachines := &v1alpha1.MetalStackMachineList{}
242+
err := r.client.List(r.ctx, infraMachines, &client.ListOptions{
243+
Limit: 1,
244+
Namespace: r.cluster.Namespace,
245+
LabelSelector: labels.SelectorFromSet(labels.Set{
246+
clusterv1.ClusterNameLabel: r.cluster.Name,
247+
}),
248+
})
249+
if err != nil {
250+
return fmt.Errorf("failed to fetch machines: %w", err)
251+
}
252+
253+
if len(infraMachines.Items) > 0 {
254+
return errors.New("waiting for all infra machines to be gone")
255+
}
256+
return nil
257+
}
258+
234259
func (r *clusterReconciler) deleteControlPlaneIP() error {
235260
if r.infraCluster.Spec.ControlPlaneIP == nil {
236261
return nil

0 commit comments

Comments
 (0)