Skip to content

Commit ed5e5a8

Browse files
committed
Fix premature attempt to resolve machine resources
We can't resolve machine resources until the cluster is initialised.
1 parent 031f9c2 commit ed5e5a8

File tree

1 file changed

+31
-27
lines changed

1 file changed

+31
-27
lines changed

controllers/openstackmachine_controller.go

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -153,36 +153,33 @@ func (r *OpenStackMachineReconciler) Reconcile(ctx context.Context, req ctrl.Req
153153
}
154154
scope := scope.NewWithLogger(clientScope, log)
155155

156+
clusterName := names.ClusterName(cluster)
157+
158+
// Handle deleted machines
159+
if !openStackMachine.DeletionTimestamp.IsZero() {
160+
return r.reconcileDelete(scope, clusterName, infraCluster, machine, openStackMachine)
161+
}
162+
163+
// Handle non-deleted clusters
164+
return r.reconcileNormal(ctx, scope, clusterName, infraCluster, machine, openStackMachine)
165+
}
166+
167+
func resolveMachineResources(scope *scope.WithLogger, clusterName string, openStackCluster *infrav1.OpenStackCluster, openStackMachine *infrav1.OpenStackMachine, machine *clusterv1.Machine) (bool, error) {
156168
// Resolve and store referenced resources
157169
changed, err := compute.ResolveReferencedMachineResources(scope,
158170
&openStackMachine.Spec, &openStackMachine.Status.ReferencedResources,
159-
names.ClusterName(cluster), openStackMachine.Name,
160-
infraCluster, getManagedSecurityGroup(infraCluster, machine))
171+
clusterName, openStackMachine.Name,
172+
openStackCluster, getManagedSecurityGroup(openStackCluster, machine))
161173
if err != nil {
162-
return reconcile.Result{}, err
174+
return false, err
163175
}
164176
if changed {
165177
// If the referenced resources have changed, we need to update the OpenStackMachine status now.
166-
return reconcile.Result{}, nil
178+
return true, nil
167179
}
168180

169181
// Adopt any existing dependent resources
170-
changed, err = compute.AdoptDependentMachineResources(scope, &openStackMachine.Status.ReferencedResources, &openStackMachine.Status.DependentResources)
171-
if err != nil {
172-
return reconcile.Result{}, err
173-
}
174-
if changed {
175-
// If the dependent resources have changed, we need to update the OpenStackMachine status now.
176-
return reconcile.Result{}, nil
177-
}
178-
179-
// Handle deleted machines
180-
if !openStackMachine.DeletionTimestamp.IsZero() {
181-
return r.reconcileDelete(scope, cluster, infraCluster, machine, openStackMachine)
182-
}
183-
184-
// Handle non-deleted clusters
185-
return r.reconcileNormal(ctx, scope, cluster, infraCluster, machine, openStackMachine)
182+
return compute.AdoptDependentMachineResources(scope, &openStackMachine.Status.ReferencedResources, &openStackMachine.Status.DependentResources)
186183
}
187184

188185
func patchMachine(ctx context.Context, patchHelper *patch.Helper, openStackMachine *infrav1.OpenStackMachine, machine *clusterv1.Machine, options ...patch.Option) error {
@@ -253,11 +250,9 @@ func (r *OpenStackMachineReconciler) SetupWithManager(ctx context.Context, mgr c
253250
Complete(r)
254251
}
255252

256-
func (r *OpenStackMachineReconciler) reconcileDelete(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStackCluster *infrav1.OpenStackCluster, machine *clusterv1.Machine, openStackMachine *infrav1.OpenStackMachine) (ctrl.Result, error) { //nolint:unparam
253+
func (r *OpenStackMachineReconciler) reconcileDelete(scope *scope.WithLogger, clusterName string, openStackCluster *infrav1.OpenStackCluster, machine *clusterv1.Machine, openStackMachine *infrav1.OpenStackMachine) (ctrl.Result, error) { //nolint:unparam
257254
scope.Logger().Info("Reconciling Machine delete")
258255

259-
clusterName := names.ClusterName(cluster)
260-
261256
computeService, err := compute.NewService(scope)
262257
if err != nil {
263258
return ctrl.Result{}, err
@@ -268,6 +263,13 @@ func (r *OpenStackMachineReconciler) reconcileDelete(scope *scope.WithLogger, cl
268263
return ctrl.Result{}, err
269264
}
270265

266+
// We may have resources to adopt if the cluster is ready
267+
if openStackCluster.Status.Ready {
268+
if _, err := resolveMachineResources(scope, clusterName, openStackCluster, openStackMachine, machine); err != nil {
269+
return ctrl.Result{}, err
270+
}
271+
}
272+
271273
if openStackCluster.Spec.APIServerLoadBalancer.IsEnabled() {
272274
loadBalancerService, err := loadbalancer.NewService(scope)
273275
if err != nil {
@@ -480,7 +482,7 @@ func (r *OpenStackMachineReconciler) reconcileDeleteFloatingAddressFromPool(scop
480482
return r.Client.Update(context.Background(), claim)
481483
}
482484

483-
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) {
485+
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) {
484486
var err error
485487

486488
// If the OpenStackMachine is in an error state, return early.
@@ -495,12 +497,16 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, scope
495497
return ctrl.Result{}, nil
496498
}
497499

498-
if !cluster.Status.InfrastructureReady {
500+
if !openStackCluster.Status.Ready {
499501
scope.Logger().Info("Cluster infrastructure is not ready yet, re-queuing machine")
500502
conditions.MarkFalse(openStackMachine, infrav1.InstanceReadyCondition, infrav1.WaitingForClusterInfrastructureReason, clusterv1.ConditionSeverityInfo, "")
501503
return ctrl.Result{RequeueAfter: waitForClusterInfrastructureReadyDuration}, nil
502504
}
503505

506+
if changed, err := resolveMachineResources(scope, clusterName, openStackCluster, openStackMachine, machine); changed || err != nil {
507+
return ctrl.Result{}, err
508+
}
509+
504510
// Make sure bootstrap data is available and populated.
505511
if machine.Spec.Bootstrap.DataSecretName == nil {
506512
scope.Logger().Info("Bootstrap data secret reference is not yet available")
@@ -513,8 +519,6 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, scope
513519
}
514520
scope.Logger().Info("Reconciling Machine")
515521

516-
clusterName := names.ClusterName(cluster)
517-
518522
computeService, err := compute.NewService(scope)
519523
if err != nil {
520524
return ctrl.Result{}, err

0 commit comments

Comments
 (0)