@@ -33,6 +33,7 @@ import (
33
33
"sigs.k8s.io/cluster-api-provider-openstack/pkg/cloud/openstack/services/provider"
34
34
"sigs.k8s.io/cluster-api-provider-openstack/pkg/cloud/openstack/services/userdata"
35
35
"sigs.k8s.io/cluster-api/api/v1alpha2"
36
+ "sigs.k8s.io/cluster-api/util/patch"
36
37
"sigs.k8s.io/controller-runtime/pkg/log"
37
38
"sigs.k8s.io/controller-runtime/pkg/reconcile"
38
39
"strconv"
@@ -44,8 +45,8 @@ import (
44
45
45
46
apierrors "k8s.io/apimachinery/pkg/api/errors"
46
47
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha2"
47
- capierrors "sigs.k8s.io/cluster-api/pkg/ errors"
48
- "sigs.k8s.io/cluster-api/pkg/ util"
48
+ capierrors "sigs.k8s.io/cluster-api/errors"
49
+ "sigs.k8s.io/cluster-api/util"
49
50
)
50
51
51
52
const (
@@ -67,7 +68,7 @@ type OpenStackMachineReconciler struct {
67
68
// +kubebuilder:rbac:groups=cluster.x-k8s.io,resources=clusters;machines,verbs=get;list;watch
68
69
// +kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;watch;create;update;patch
69
70
70
- func (r * OpenStackMachineReconciler ) Reconcile (request ctrl.Request ) (ctrl.Result , error ) {
71
+ func (r * OpenStackMachineReconciler ) Reconcile (request ctrl.Request ) (_ ctrl.Result , reterr error ) {
71
72
ctx := context .TODO ()
72
73
logger := log .Log .
73
74
WithName (machineControllerName ).
@@ -119,6 +120,20 @@ func (r *OpenStackMachineReconciler) Reconcile(request ctrl.Request) (ctrl.Resul
119
120
120
121
logger = logger .WithName (fmt .Sprintf ("openStackCluster=%s" , openStackCluster .Name ))
121
122
123
+ // Initialize the patch helper
124
+ patchHelper , err := patch .NewHelper (openStackMachine , r )
125
+ if err != nil {
126
+ return ctrl.Result {}, err
127
+ }
128
+ // Always attempt to Patch the Machine object and status after each reconciliation.
129
+ defer func () {
130
+ if err := patchHelper .Patch (ctx , openStackMachine ); err != nil {
131
+ if reterr == nil {
132
+ reterr = err
133
+ }
134
+ }
135
+ }()
136
+
122
137
// Handle deleted clusters
123
138
if ! openStackMachine .DeletionTimestamp .IsZero () {
124
139
return r .reconcileMachineDelete (logger , machine , openStackMachine , cluster , openStackCluster )
@@ -156,8 +171,6 @@ func (r *OpenStackMachineReconciler) reconcileMachine(logger logr.Logger, machin
156
171
157
172
clusterName := fmt .Sprintf ("%s-%s" , cluster .ObjectMeta .Namespace , cluster .Name )
158
173
159
- openstackMachinePatch := client .MergeFrom (openStackMachine .DeepCopy ())
160
-
161
174
osProviderClient , clientOpts , err := provider .NewClientFromMachine (r .Client , openStackMachine )
162
175
if err != nil {
163
176
return reconcile.Result {}, err
@@ -173,12 +186,6 @@ func (r *OpenStackMachineReconciler) reconcileMachine(logger logr.Logger, machin
173
186
return reconcile.Result {}, err
174
187
}
175
188
176
- defer func () {
177
- if err := storeMachine (r .Client , openStackMachine , openstackMachinePatch ); err != nil && reterr == nil {
178
- reterr = err
179
- }
180
- }()
181
-
182
189
instance , err := r .getOrCreate (computeService , machine , openStackMachine , cluster , openStackCluster )
183
190
if err != nil {
184
191
handleMachineError (openStackMachine , capierrors .UpdateMachineError , errors .Errorf ("OpenStack instance cannot be created: %v" , err ))
@@ -334,22 +341,6 @@ func getTimeout(name string, timeout int) time.Duration {
334
341
return time .Duration (timeout )
335
342
}
336
343
337
- func storeMachine (ctrlClient client.Client , openStackMachine * infrav1.OpenStackMachine , openStackMachinePatch client.Patch ) error {
338
- ctx := context .TODO ()
339
-
340
- // Patch Cluster object.
341
- if err := ctrlClient .Patch (ctx , openStackMachine , openStackMachinePatch ); err != nil {
342
- return errors .Wrapf (err , "error patching OpenStackMachine %s/%s" , openStackMachine .Namespace , openStackMachine .Name )
343
- }
344
-
345
- // Patch Cluster status.
346
- if err := ctrlClient .Status ().Patch (ctx , openStackMachine , openStackMachinePatch ); err != nil {
347
- return errors .Wrapf (err , "error patching OpenStackMachine %s/%s status" , openStackMachine .Namespace , openStackMachine .Name )
348
- }
349
-
350
- return nil
351
- }
352
-
353
344
func (r * OpenStackMachineReconciler ) SetupWithManager (mgr ctrl.Manager ) error {
354
345
return ctrl .NewControllerManagedBy (mgr ).
355
346
For (& infrav1.OpenStackMachine {}).
0 commit comments