@@ -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.
3539type 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.
4346type 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.
4851func 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 .
6871func (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.
94101func (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
0 commit comments