Skip to content

Commit 3d55171

Browse files
authored
remove eks entry when cluster got deleted (#8)
1 parent 5a9ef7c commit 3d55171

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

controllers/cks_cluster_controller.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,25 @@ func (r *CksClusterReconciliationRunner) Reconcile() (res ctrl.Result, reterr er
9191

9292
// ReconcileDelete cleans up resources used by the cluster and finally removes the CloudStackCluster's finalizers.
9393
func (r *CksClusterReconciliationRunner) ReconcileDelete() (ctrl.Result, error) {
94-
if r.ReconciliationSubject.Status.CloudStackClusterID != "" {
94+
// Only attempt CKS deletion if SyncWithACS was enabled and CloudStackClusterID is set
95+
if r.CSCluster.Spec.SyncWithACS != nil && *r.CSCluster.Spec.SyncWithACS && r.ReconciliationSubject.Status.CloudStackClusterID != "" {
9596
if len(r.FailureDomains.Items) == 0 {
96-
return ctrl.Result{}, fmt.Errorf("no failure domains found")
97+
return ctrl.Result{}, fmt.Errorf("cannot delete CKS cluster: no failure domains found (CloudStackClusterID: %s)", r.ReconciliationSubject.Status.CloudStackClusterID)
9798
}
99+
98100
res, err := r.AsFailureDomainUser(&r.FailureDomains.Items[0].Spec)()
99101
if r.ShouldReturn(res, err) {
100102
return res, err
101103
}
104+
105+
r.Log.Info("Deleting CKS cluster from CloudStack", "CloudStackClusterID", r.ReconciliationSubject.Status.CloudStackClusterID)
102106
err = r.CSUser.DeleteCksCluster(r.ReconciliationSubject)
103107
if err != nil && !strings.Contains(err.Error(), " not found") {
104108
return r.RequeueWithMessage(fmt.Sprintf("Deleting cks cluster on CloudStack failed. error: %s", err.Error()))
105109
}
110+
r.Log.Info("Successfully deleted CKS cluster from CloudStack", "CloudStackClusterID", r.ReconciliationSubject.Status.CloudStackClusterID)
106111
}
112+
107113
controllerutil.RemoveFinalizer(r.ReconciliationSubject, CksClusterFinalizer)
108114
return ctrl.Result{}, nil
109115
}

controllers/cloudstackcluster_controller.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@ func (r *CloudStackClusterReconciliationRunner) SetFailureDomainsStatusMap() (ct
140140
// ReconcileDelete cleans up resources used by the cluster and finally removes the CloudStackCluster's finalizers.
141141
func (r *CloudStackClusterReconciliationRunner) ReconcileDelete() (ctrl.Result, error) {
142142
r.Log.Info("Deleting CloudStackCluster.")
143+
144+
// Wait for CKS cluster cleanup to complete before deleting FailureDomains
145+
const cksClusterFinalizer = "ckscluster.infrastructure.cluster.x-k8s.io"
146+
if controllerutil.ContainsFinalizer(r.ReconciliationSubject, cksClusterFinalizer) {
147+
return r.RequeueWithMessage("Waiting for CKS cluster cleanup to complete before deleting FailureDomains.")
148+
}
149+
143150
if res, err := r.GetFailureDomains(r.FailureDomains)(); r.ShouldReturn(res, err) {
144151
return res, err
145152
}

pkg/cloud/cks_cluster.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,18 @@ func (c *client) GetOrCreateCksCluster(cluster *clusterv1.Cluster, csCluster *in
5353
if csCluster.Status.CloudStackClusterID != "" {
5454
externalManagedCluster, count, err := c.cs.Kubernetes.GetKubernetesClusterByID(csCluster.Status.CloudStackClusterID, withExternalManaged(), cloudstack.WithProject(c.user.Project.ID))
5555
if err != nil {
56-
return err
56+
return fmt.Errorf("failed to get CKS cluster by ID %s: %w", csCluster.Status.CloudStackClusterID, err)
5757
} else if count > 0 {
5858
csCluster.Status.CloudStackClusterID = externalManagedCluster.Id
5959
return nil
6060
}
61+
// Cluster ID is set in status but not found in CloudStack
62+
// This could mean the cluster was deleted externally or doesn't have ExternalManaged type
63+
return fmt.Errorf("CKS cluster with ID %s not found in CloudStack (expected ExternalManaged type)", csCluster.Status.CloudStackClusterID)
6164
}
6265

6366
// Check if a cluster exists with the same name
64-
clusterName := fmt.Sprintf("%s - %s - %s", cluster.GetName(), csCluster.GetName(), csCluster.GetUID())
67+
clusterName := cluster.GetName()
6568
externalManagedCluster, count, err := c.cs.Kubernetes.GetKubernetesClusterByName(clusterName, withExternalManaged(), cloudstack.WithProject(c.user.Project.ID))
6669
if err != nil && !strings.Contains(err.Error(), "No match found for ") {
6770
return err
@@ -81,7 +84,7 @@ func (c *client) GetOrCreateCksCluster(cluster *clusterv1.Cluster, csCluster *in
8184
}
8285
}
8386
// NewCreateKubernetesClusterParams(description string, kubernetesversionid string, name string, serviceofferingid string, size int64, zoneid string) *CreateKubernetesClusterParams
84-
params := c.cs.Kubernetes.NewCreateKubernetesClusterParams(fmt.Sprintf("%s managed by CAPC", clusterName), "", clusterName, "", 0, fd.Zone.ID)
87+
params := c.cs.Kubernetes.NewCreateKubernetesClusterParams(fmt.Sprintf("Cluster %s managed by CAPC", clusterName), "", clusterName, "", 0, fd.Zone.ID)
8588

8689
setIfNotEmpty(c.user.Project.ID, params.SetProjectid)
8790
setIfNotEmpty(accountName, params.SetAccount)

0 commit comments

Comments
 (0)