@@ -21,30 +21,33 @@ import (
21
21
"fmt"
22
22
23
23
ctrl "sigs.k8s.io/controller-runtime"
24
+ "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
24
25
25
26
infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3"
26
27
csCtrlrUtils "sigs.k8s.io/cluster-api-provider-cloudstack/controllers/utils"
27
28
)
28
29
29
- // RBAC permissions for CloudStackCluster.
30
+ const CksMachineFinalizer = "cksMachine.infrastructure.cluster.x-k8s.io"
31
+
32
+ // RBAC permissions for CloudStackMachines.
30
33
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=cloudstackmachines,verbs=get;list;watch
31
34
// +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
32
36
33
- // CksMachineReconciliationRunner is a ReconciliationRunner with extensions specific to CloudStackClusters .
37
+ // CksMachineReconciliationRunner is a ReconciliationRunner with extensions specific to CloudStackMachines .
34
38
// The runner does the actual reconciliation.
35
39
type CksMachineReconciliationRunner struct {
36
40
* csCtrlrUtils.ReconciliationRunner
37
41
FailureDomain * infrav1.CloudStackFailureDomain
38
42
ReconciliationSubject * infrav1.CloudStackMachine
39
43
}
40
44
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.
43
46
type CksMachineReconciler struct {
44
47
csCtrlrUtils.ReconcilerBase
45
48
}
46
49
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.
48
51
func NewCksMachineReconciliationRunner () * CksMachineReconciliationRunner {
49
52
// Set concrete type and init pointers.
50
53
runner := & CksMachineReconciliationRunner {ReconciliationSubject : & infrav1.CloudStackMachine {}}
@@ -64,7 +67,7 @@ func (reconciler *CksMachineReconciler) Reconcile(ctx context.Context, req ctrl.
64
67
return r .RunBaseReconciliationStages ()
65
68
}
66
69
67
- // Reconcile actually reconciles the CloudStackCluster .
70
+ // Reconcile actually reconciles the CloudStackMachine .
68
71
func (r * CksMachineReconciliationRunner ) Reconcile () (res ctrl.Result , reterr error ) {
69
72
if ! r .CSCluster .Spec .SyncWithACS {
70
73
return ctrl.Result {}, nil
@@ -77,6 +80,9 @@ func (r *CksMachineReconciliationRunner) Reconcile() (res ctrl.Result, reterr er
77
80
return r .RequeueWithMessage ("InstanceID is not set" )
78
81
}
79
82
83
+ // Prevent premature deletion.
84
+ controllerutil .AddFinalizer (r .ReconciliationSubject , CksMachineFinalizer )
85
+
80
86
res , err := r .AsFailureDomainUser (& r .FailureDomain .Spec )()
81
87
if r .ShouldReturn (res , err ) {
82
88
return res , err
@@ -86,18 +92,22 @@ func (r *CksMachineReconciliationRunner) Reconcile() (res ctrl.Result, reterr er
86
92
if err != nil {
87
93
return r .RequeueWithMessage (fmt .Sprintf ("Adding VM to CloudStack CKS cluster failed. error: %s" , err .Error ()))
88
94
}
95
+ r .Log .Info ("Assigned VM to CKS" )
89
96
return ctrl.Result {}, nil
90
97
91
98
}
92
99
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.
94
101
func (r * CksMachineReconciliationRunner ) ReconcileDelete () (ctrl.Result , error ) {
102
+ r .Log .Info ("Removing VM from CKS" )
95
103
if r .ReconciliationSubject .Spec .InstanceID != nil && * r .ReconciliationSubject .Spec .InstanceID != "" {
96
104
err := r .CSUser .RemoveVMFromCksCluster (r .CSCluster , r .ReconciliationSubject )
97
105
if err != nil {
98
106
return r .RequeueWithMessage (fmt .Sprintf ("Removing VM from CloudStack CKS cluster failed. error: %s" , err .Error ()))
99
107
}
100
108
}
109
+ r .Log .Info ("Removed VM from CKS" )
110
+ controllerutil .RemoveFinalizer (r .ReconciliationSubject , CksMachineFinalizer )
101
111
return ctrl.Result {}, nil
102
112
}
103
113
0 commit comments