@@ -150,33 +150,32 @@ func (r *OpenStackMachineReconciler) Reconcile(ctx context.Context, req ctrl.Req
150
150
}
151
151
scope := scope .NewWithLogger (clientScope , log )
152
152
153
- // Resolve and store referenced resources
154
- changed , err := compute .ResolveReferencedMachineResources (scope , infraCluster , & openStackMachine .Spec , & openStackMachine .Status .ReferencedResources )
155
- if err != nil {
156
- return reconcile.Result {}, err
157
- }
158
- if changed {
159
- // If the referenced resources have changed, we need to update the OpenStackMachine status now.
160
- return reconcile.Result {}, nil
153
+ clusterName := fmt .Sprintf ("%s-%s" , cluster .Namespace , cluster .Name )
154
+
155
+ // Handle deleted machines
156
+ if ! openStackMachine .DeletionTimestamp .IsZero () {
157
+ return r .reconcileDelete (scope , clusterName , infraCluster , machine , openStackMachine )
161
158
}
162
159
163
- // Resolve and store dependent resources
164
- changed , err = compute .ResolveDependentMachineResources (scope , openStackMachine )
160
+ // Handle non-deleted clusters
161
+ return r .reconcileNormal (ctx , scope , clusterName , infraCluster , machine , openStackMachine )
162
+ }
163
+
164
+ func resolveMachineResources (scope * scope.WithLogger , openStackCluster * infrav1.OpenStackCluster , openStackMachine * infrav1.OpenStackMachine ) (bool , error ) {
165
+ // Resolve and store referenced resources
166
+ changed , err := compute .ResolveReferencedMachineResources (scope ,
167
+ openStackCluster ,
168
+ & openStackMachine .Spec , & openStackMachine .Status .ReferencedResources )
165
169
if err != nil {
166
- return reconcile. Result {} , err
170
+ return false , err
167
171
}
168
172
if changed {
169
- // If the dependent resources have changed, we need to update the OpenStackMachine status now.
170
- return reconcile.Result {}, nil
171
- }
172
-
173
- // Handle deleted machines
174
- if ! openStackMachine .DeletionTimestamp .IsZero () {
175
- return r .reconcileDelete (scope , cluster , infraCluster , machine , openStackMachine )
173
+ // If the referenced resources have changed, we need to update the OpenStackMachine status now.
174
+ return true , nil
176
175
}
177
176
178
- // Handle non-deleted clusters
179
- return r . reconcileNormal ( ctx , scope , cluster , infraCluster , machine , openStackMachine )
177
+ // Adopt any existing dependent resources
178
+ return false , compute . AdoptDependentMachineResources ( scope , openStackMachine . Name , & openStackMachine . Status . ReferencedResources , & openStackMachine . Status . DependentResources )
180
179
}
181
180
182
181
func patchMachine (ctx context.Context , patchHelper * patch.Helper , openStackMachine * infrav1.OpenStackMachine , machine * clusterv1.Machine , options ... patch.Option ) error {
@@ -231,11 +230,9 @@ func (r *OpenStackMachineReconciler) SetupWithManager(ctx context.Context, mgr c
231
230
Complete (r )
232
231
}
233
232
234
- func (r * OpenStackMachineReconciler ) reconcileDelete (scope * scope.WithLogger , cluster * clusterv1. Cluster , openStackCluster * infrav1.OpenStackCluster , machine * clusterv1.Machine , openStackMachine * infrav1.OpenStackMachine ) (ctrl.Result , error ) { //nolint:unparam
233
+ func (r * OpenStackMachineReconciler ) reconcileDelete (scope * scope.WithLogger , clusterName string , openStackCluster * infrav1.OpenStackCluster , machine * clusterv1.Machine , openStackMachine * infrav1.OpenStackMachine ) (ctrl.Result , error ) { //nolint:unparam
235
234
scope .Logger ().Info ("Reconciling Machine delete" )
236
235
237
- clusterName := fmt .Sprintf ("%s-%s" , cluster .ObjectMeta .Namespace , cluster .Name )
238
-
239
236
computeService , err := compute .NewService (scope )
240
237
if err != nil {
241
238
return ctrl.Result {}, err
@@ -246,6 +243,13 @@ func (r *OpenStackMachineReconciler) reconcileDelete(scope *scope.WithLogger, cl
246
243
return ctrl.Result {}, err
247
244
}
248
245
246
+ // We may have resources to adopt if the cluster is ready
247
+ if openStackCluster .Status .Ready && openStackCluster .Status .Network != nil {
248
+ if _ , err := resolveMachineResources (scope , openStackCluster , openStackMachine ); err != nil {
249
+ return ctrl.Result {}, err
250
+ }
251
+ }
252
+
249
253
if openStackCluster .Spec .APIServerLoadBalancer .IsEnabled () {
250
254
loadBalancerService , err := loadbalancer .NewService (scope )
251
255
if err != nil {
@@ -458,7 +462,7 @@ func (r *OpenStackMachineReconciler) reconcileDeleteFloatingAddressFromPool(scop
458
462
return r .Client .Update (context .Background (), claim )
459
463
}
460
464
461
- func (r * OpenStackMachineReconciler ) reconcileNormal (ctx context.Context , scope * scope.WithLogger , cluster * clusterv1. Cluster , openStackCluster * infrav1.OpenStackCluster , machine * clusterv1.Machine , openStackMachine * infrav1.OpenStackMachine ) (_ ctrl.Result , reterr error ) {
465
+ func (r * OpenStackMachineReconciler ) reconcileNormal (ctx context.Context , scope * scope.WithLogger , clusterName string , openStackCluster * infrav1.OpenStackCluster , machine * clusterv1.Machine , openStackMachine * infrav1.OpenStackMachine ) (_ ctrl.Result , reterr error ) {
462
466
var err error
463
467
464
468
// If the OpenStackMachine is in an error state, return early.
@@ -473,12 +477,16 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, scope
473
477
return ctrl.Result {}, nil
474
478
}
475
479
476
- if ! cluster .Status .InfrastructureReady {
480
+ if ! openStackCluster .Status .Ready {
477
481
scope .Logger ().Info ("Cluster infrastructure is not ready yet, re-queuing machine" )
478
482
conditions .MarkFalse (openStackMachine , infrav1 .InstanceReadyCondition , infrav1 .WaitingForClusterInfrastructureReason , clusterv1 .ConditionSeverityInfo , "" )
479
483
return ctrl.Result {RequeueAfter : waitForClusterInfrastructureReadyDuration }, nil
480
484
}
481
485
486
+ if changed , err := resolveMachineResources (scope , openStackCluster , openStackMachine ); changed || err != nil {
487
+ return ctrl.Result {}, err
488
+ }
489
+
482
490
// Make sure bootstrap data is available and populated.
483
491
if machine .Spec .Bootstrap .DataSecretName == nil {
484
492
scope .Logger ().Info ("Bootstrap data secret reference is not yet available" )
@@ -491,8 +499,6 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, scope
491
499
}
492
500
scope .Logger ().Info ("Reconciling Machine" )
493
501
494
- clusterName := fmt .Sprintf ("%s-%s" , cluster .ObjectMeta .Namespace , cluster .Name )
495
-
496
502
computeService , err := compute .NewService (scope )
497
503
if err != nil {
498
504
return ctrl.Result {}, err
0 commit comments