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