Skip to content

Commit 27b3cef

Browse files
authored
Merge pull request #1944 from shiftstack/issue1942
🌱 Deduplicate AdoptMachinePorts and AdoptBastionPorts
2 parents 67fa7b7 + 750af59 commit 27b3cef

File tree

7 files changed

+217
-359
lines changed

7 files changed

+217
-359
lines changed

controllers/openstackcluster_controller.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,14 +231,13 @@ func resolveBastionResources(scope *scope.WithLogger, openStackCluster *infrav1.
231231
return true, nil
232232
}
233233

234-
changed, err = compute.ResolveDependentBastionResources(scope, openStackCluster, bastionName(openStackCluster.Name))
234+
err = compute.AdoptDependentMachineResources(scope,
235+
bastionName(openStackCluster.Name),
236+
&openStackCluster.Status.Bastion.ReferencedResources,
237+
&openStackCluster.Status.Bastion.DependentResources)
235238
if err != nil {
236239
return false, err
237240
}
238-
if changed {
239-
// If the dependent resources have changed, we need to update the OpenStackCluster status now.
240-
return true, nil
241-
}
242241
}
243242
return false, nil
244243
}

controllers/openstackmachine_controller.go

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

182181
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
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

pkg/cloud/services/compute/dependent_resources.go

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,11 @@ import (
2222
"sigs.k8s.io/cluster-api-provider-openstack/pkg/scope"
2323
)
2424

25-
func ResolveDependentMachineResources(scope *scope.WithLogger, openStackMachine *infrav1.OpenStackMachine) (changed bool, err error) {
26-
changed = false
27-
28-
networkingService, err := networking.NewService(scope)
29-
if err != nil {
30-
return changed, err
31-
}
32-
33-
return networkingService.AdoptMachinePorts(scope, openStackMachine, openStackMachine.Status.ReferencedResources.Ports)
34-
}
35-
36-
func ResolveDependentBastionResources(scope *scope.WithLogger, openStackCluster *infrav1.OpenStackCluster, bastionName string) (changed bool, err error) {
37-
changed = false
38-
25+
func AdoptDependentMachineResources(scope *scope.WithLogger, baseName string, referencedResources *infrav1.ReferencedMachineResources, dependentResources *infrav1.DependentMachineResources) error {
3926
networkingService, err := networking.NewService(scope)
4027
if err != nil {
41-
return changed, err
28+
return err
4229
}
4330

44-
return networkingService.AdoptBastionPorts(scope, openStackCluster, bastionName)
31+
return networkingService.AdoptPorts(scope, baseName, referencedResources.Ports, dependentResources)
4532
}

pkg/cloud/services/compute/dependent_resources_test.go

Lines changed: 0 additions & 219 deletions
This file was deleted.

0 commit comments

Comments
 (0)