@@ -150,33 +150,32 @@ func (r *OpenStackMachineReconciler) Reconcile(ctx context.Context, req ctrl.Req
150150 }
151151 scope := scope .NewWithLogger (clientScope , log )
152152
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 )
161158 }
162159
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 )
165169 if err != nil {
166- return reconcile. Result {} , err
170+ return false , err
167171 }
168172 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
176175 }
177176
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 )
180179}
181180
182181func 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
231230 Complete (r )
232231}
233232
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
235234 scope .Logger ().Info ("Reconciling Machine delete" )
236235
237- clusterName := fmt .Sprintf ("%s-%s" , cluster .ObjectMeta .Namespace , cluster .Name )
238-
239236 computeService , err := compute .NewService (scope )
240237 if err != nil {
241238 return ctrl.Result {}, err
@@ -246,6 +243,13 @@ func (r *OpenStackMachineReconciler) reconcileDelete(scope *scope.WithLogger, cl
246243 return ctrl.Result {}, err
247244 }
248245
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+
249253 if openStackCluster .Spec .APIServerLoadBalancer .IsEnabled () {
250254 loadBalancerService , err := loadbalancer .NewService (scope )
251255 if err != nil {
@@ -458,7 +462,7 @@ func (r *OpenStackMachineReconciler) reconcileDeleteFloatingAddressFromPool(scop
458462 return r .Client .Update (context .Background (), claim )
459463}
460464
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 ) {
462466 var err error
463467
464468 // If the OpenStackMachine is in an error state, return early.
@@ -473,12 +477,16 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, scope
473477 return ctrl.Result {}, nil
474478 }
475479
476- if ! cluster .Status .InfrastructureReady {
480+ if ! openStackCluster .Status .Ready {
477481 scope .Logger ().Info ("Cluster infrastructure is not ready yet, re-queuing machine" )
478482 conditions .MarkFalse (openStackMachine , infrav1 .InstanceReadyCondition , infrav1 .WaitingForClusterInfrastructureReason , clusterv1 .ConditionSeverityInfo , "" )
479483 return ctrl.Result {RequeueAfter : waitForClusterInfrastructureReadyDuration }, nil
480484 }
481485
486+ if changed , err := resolveMachineResources (scope , openStackCluster , openStackMachine ); changed || err != nil {
487+ return ctrl.Result {}, err
488+ }
489+
482490 // Make sure bootstrap data is available and populated.
483491 if machine .Spec .Bootstrap .DataSecretName == nil {
484492 scope .Logger ().Info ("Bootstrap data secret reference is not yet available" )
@@ -491,8 +499,6 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, scope
491499 }
492500 scope .Logger ().Info ("Reconciling Machine" )
493501
494- clusterName := fmt .Sprintf ("%s-%s" , cluster .ObjectMeta .Namespace , cluster .Name )
495-
496502 computeService , err := compute .NewService (scope )
497503 if err != nil {
498504 return ctrl.Result {}, err
0 commit comments