@@ -152,9 +152,11 @@ func (r *OpenStackClusterReconciler) reconcileDelete(ctx context.Context, scope
152152 // A bastion may have been created if cluster initialisation previously reached populating the network status
153153 // We attempt to delete it even if no status was written, just in case
154154 if openStackCluster .Status .Network != nil {
155- // Attempt to resolve bastion resources before delete. We don't need to worry about starting if the resources have changed on update.
155+ // Attempt to resolve bastion resources before delete.
156+ // Even if we fail, we need to continue with the deletion or risk getting stuck.
157+ // For example, if the image doesn't exist, we do not have a bastion.
156158 if _ , err := resolveBastionResources (scope , clusterResourceName , openStackCluster ); err != nil {
157- return reconcile. Result {}, err
159+ scope . Logger (). Info ( "Failed to resolve bastion, continuing." , "error" , err )
158160 }
159161
160162 if err := deleteBastion (scope , cluster , openStackCluster ); err != nil {
@@ -614,11 +616,7 @@ func getOrCreateBastionPorts(openStackCluster *infrav1.OpenStackCluster, network
614616 return errors .New ("bastion resources are nil" )
615617 }
616618
617- if len (desiredPorts ) == len (resources .Ports ) {
618- return nil
619- }
620-
621- err := networkingService .CreatePorts (openStackCluster , desiredPorts , resources )
619+ err := networkingService .EnsurePorts (openStackCluster , desiredPorts , resources )
622620 if err != nil {
623621 return fmt .Errorf ("failed to create ports for bastion %s: %w" , bastionName (openStackCluster .Name ), err )
624622 }
@@ -664,14 +662,19 @@ func resolveLoadBalancerNetwork(openStackCluster *infrav1.OpenStackCluster, netw
664662
665663 // Filter out only relevant subnets specified by the spec
666664 lbNetStatus .Subnets = []infrav1.Subnet {}
667- for _ , s := range lbSpec .Subnets {
665+ for i := range lbSpec .Subnets {
666+ s := lbSpec .Subnets [i ]
668667 matchFound := false
669668 for _ , subnetID := range lbNet .Subnets {
670- if s .ID != nil && subnetID == * s .ID {
669+ subnet , err := networkingService .GetSubnetByParam (& s )
670+ if s .ID != nil && subnetID == * s .ID && err == nil {
671671 matchFound = true
672672 lbNetStatus .Subnets = append (
673673 lbNetStatus .Subnets , infrav1.Subnet {
674- ID : * s .ID ,
674+ ID : subnet .ID ,
675+ Name : subnet .Name ,
676+ CIDR : subnet .CIDR ,
677+ Tags : subnet .Tags ,
675678 })
676679 }
677680 }
@@ -680,6 +683,8 @@ func resolveLoadBalancerNetwork(openStackCluster *infrav1.OpenStackCluster, netw
680683 return fmt .Errorf ("no subnet match was found in the specified network (specified subnet: %v, available subnets: %v)" , s , lbNet .Subnets )
681684 }
682685 }
686+
687+ openStackCluster .Status .APIServerLoadBalancer .LoadBalancerNetwork = lbNetStatus
683688 }
684689 }
685690
0 commit comments