Skip to content

Commit 3d1a8c3

Browse files
committed
Add finalizer for CksMachine Controller
1 parent 1f37d9b commit 3d1a8c3

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

controllers/cks_cluster_controller.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ type CksClusterReconciliationRunner struct {
4444
}
4545

4646
// CksClusterReconciler is the k8s controller manager's interface to reconcile a CloudStackCluster.
47-
// This is primarily to adapt to k8s.
4847
type CksClusterReconciler struct {
4948
csCtrlrUtils.ReconcilerBase
5049
}

controllers/cks_machine_controller.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,33 @@ import (
2121
"fmt"
2222

2323
ctrl "sigs.k8s.io/controller-runtime"
24+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2425

2526
infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3"
2627
csCtrlrUtils "sigs.k8s.io/cluster-api-provider-cloudstack/controllers/utils"
2728
)
2829

29-
// RBAC permissions for CloudStackCluster.
30+
const CksMachineFinalizer = "cksMachine.infrastructure.cluster.x-k8s.io"
31+
32+
// RBAC permissions for CloudStackMachines.
3033
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=cloudstackmachines,verbs=get;list;watch
3134
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=cloudstackmachines/status,verbs=get
35+
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=cloudstackmachines/finalizers,verbs=update
3236

33-
// CksMachineReconciliationRunner is a ReconciliationRunner with extensions specific to CloudStackClusters.
37+
// CksMachineReconciliationRunner is a ReconciliationRunner with extensions specific to CloudStackMachines.
3438
// The runner does the actual reconciliation.
3539
type CksMachineReconciliationRunner struct {
3640
*csCtrlrUtils.ReconciliationRunner
3741
FailureDomain *infrav1.CloudStackFailureDomain
3842
ReconciliationSubject *infrav1.CloudStackMachine
3943
}
4044

41-
// CksMachineReconciler is the k8s controller manager's interface to reconcile a CloudStackCluster.
42-
// This is primarily to adapt to k8s.
45+
// CksMachineReconciler is the k8s controller manager's interface to reconcile CloudStackMachines with a CKS cluster.
4346
type CksMachineReconciler struct {
4447
csCtrlrUtils.ReconcilerBase
4548
}
4649

47-
// Initialize a new CloudStackCluster reconciliation runner with concrete types and initialized member fields.
50+
// Initialize a new CloudStackMachines reconciliation runner with concrete types and initialized member fields.
4851
func NewCksMachineReconciliationRunner() *CksMachineReconciliationRunner {
4952
// Set concrete type and init pointers.
5053
runner := &CksMachineReconciliationRunner{ReconciliationSubject: &infrav1.CloudStackMachine{}}
@@ -64,7 +67,7 @@ func (reconciler *CksMachineReconciler) Reconcile(ctx context.Context, req ctrl.
6467
return r.RunBaseReconciliationStages()
6568
}
6669

67-
// Reconcile actually reconciles the CloudStackCluster.
70+
// Reconcile actually reconciles the CloudStackMachine.
6871
func (r *CksMachineReconciliationRunner) Reconcile() (res ctrl.Result, reterr error) {
6972
if !r.CSCluster.Spec.SyncWithACS {
7073
return ctrl.Result{}, nil
@@ -77,6 +80,9 @@ func (r *CksMachineReconciliationRunner) Reconcile() (res ctrl.Result, reterr er
7780
return r.RequeueWithMessage("InstanceID is not set")
7881
}
7982

83+
// Prevent premature deletion.
84+
controllerutil.AddFinalizer(r.ReconciliationSubject, CksMachineFinalizer)
85+
8086
res, err := r.AsFailureDomainUser(&r.FailureDomain.Spec)()
8187
if r.ShouldReturn(res, err) {
8288
return res, err
@@ -86,18 +92,22 @@ func (r *CksMachineReconciliationRunner) Reconcile() (res ctrl.Result, reterr er
8692
if err != nil {
8793
return r.RequeueWithMessage(fmt.Sprintf("Adding VM to CloudStack CKS cluster failed. error: %s", err.Error()))
8894
}
95+
r.Log.Info("Assigned VM to CKS")
8996
return ctrl.Result{}, nil
9097

9198
}
9299

93-
// ReconcileDelete cleans up resources used by the cluster and finally removes the CloudStackCluster's finalizers.
100+
// ReconcileDelete cleans up resources used by the cluster and finally removes the CloudStackMachine's finalizers.
94101
func (r *CksMachineReconciliationRunner) ReconcileDelete() (ctrl.Result, error) {
102+
r.Log.Info("Removing VM from CKS")
95103
if r.ReconciliationSubject.Spec.InstanceID != nil && *r.ReconciliationSubject.Spec.InstanceID != "" {
96104
err := r.CSUser.RemoveVMFromCksCluster(r.CSCluster, r.ReconciliationSubject)
97105
if err != nil {
98106
return r.RequeueWithMessage(fmt.Sprintf("Removing VM from CloudStack CKS cluster failed. error: %s", err.Error()))
99107
}
100108
}
109+
r.Log.Info("Removed VM from CKS")
110+
controllerutil.RemoveFinalizer(r.ReconciliationSubject, CksMachineFinalizer)
101111
return ctrl.Result{}, nil
102112
}
103113

controllers/cks_machine_controller_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ var _ = Describe("CksCloudStackMachineReconciler", func() {
7575
key := client.ObjectKey{Namespace: dummies.ClusterNameSpace, Name: dummies.CSMachine1.Name}
7676
if err := k8sClient.Get(ctx, key, tempMachine); err == nil {
7777
if tempMachine.Status.Ready == true {
78-
return len(tempMachine.ObjectMeta.Finalizers) > 0
78+
return len(tempMachine.ObjectMeta.Finalizers) > 1
7979
}
8080
}
8181
return false
@@ -94,7 +94,7 @@ var _ = Describe("CksCloudStackMachineReconciler", func() {
9494

9595
mockCloudClient.EXPECT().AddVMToCksCluster(gomock.Any(), gomock.Any()).MinTimes(1).Return(nil)
9696

97-
mockCloudClient.EXPECT().DestroyVMInstance(gomock.Any()).Times(1).Return(nil)
97+
mockCloudClient.EXPECT().DestroyVMInstance(gomock.Any()).MinTimes(1).Return(nil)
9898
mockCloudClient.EXPECT().RemoveVMFromCksCluster(
9999
gomock.Any(), gomock.Any()).MinTimes(1).Return(nil)
100100
// Have to do this here or the reconcile call to GetOrCreateVMInstance may happen too early.
@@ -106,7 +106,7 @@ var _ = Describe("CksCloudStackMachineReconciler", func() {
106106
key := client.ObjectKey{Namespace: dummies.ClusterNameSpace, Name: dummies.CSMachine1.Name}
107107
if err := k8sClient.Get(ctx, key, tempMachine); err == nil {
108108
if tempMachine.Status.Ready == true {
109-
return true
109+
return len(tempMachine.ObjectMeta.Finalizers) > 1
110110
}
111111
}
112112
return false
@@ -122,7 +122,6 @@ var _ = Describe("CksCloudStackMachineReconciler", func() {
122122
}
123123
return false
124124
}, timeout).WithPolling(pollInterval).Should(BeTrue())
125-
126125
})
127126
})
128127

0 commit comments

Comments
 (0)