@@ -227,8 +227,13 @@ func resolveBastionResources(scope *scope.WithLogger, clusterResourceName string
227227 if openStackCluster .Spec .Bastion .Spec == nil {
228228 return false , fmt .Errorf ("bastion spec is nil when bastion is enabled, this shouldn't happen" )
229229 }
230+ resolved := openStackCluster .Status .Bastion .Resolved
231+ if resolved == nil {
232+ resolved = & infrav1.ResolvedMachineSpec {}
233+ openStackCluster .Status .Bastion .Resolved = resolved
234+ }
230235 changed , err := compute .ResolveMachineSpec (scope ,
231- openStackCluster .Spec .Bastion .Spec , & openStackCluster . Status . Bastion . Resolved ,
236+ openStackCluster .Spec .Bastion .Spec , resolved ,
232237 clusterResourceName , bastionName (clusterResourceName ),
233238 openStackCluster , getBastionSecurityGroupID (openStackCluster ))
234239 if err != nil {
@@ -238,10 +243,13 @@ func resolveBastionResources(scope *scope.WithLogger, clusterResourceName string
238243 // If the resolved machine spec changed we need to restart the reconcile to avoid inconsistencies between reconciles.
239244 return true , nil
240245 }
246+ resources := openStackCluster .Status .Bastion .Resources
247+ if resources == nil {
248+ resources = & infrav1.MachineResources {}
249+ openStackCluster .Status .Bastion .Resources = resources
250+ }
241251
242- err = compute .AdoptMachineResources (scope ,
243- & openStackCluster .Status .Bastion .Resolved ,
244- & openStackCluster .Status .Bastion .Resources )
252+ err = compute .AdoptMachineResources (scope , resolved , resources )
245253 if err != nil {
246254 return false , err
247255 }
@@ -268,8 +276,10 @@ func deleteBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStac
268276 }
269277 }
270278
279+ bastionStatus := openStackCluster .Status .Bastion
280+
271281 var instanceStatus * compute.InstanceStatus
272- if openStackCluster . Status . Bastion != nil && openStackCluster . Status . Bastion .ID != "" {
282+ if bastionStatus != nil && bastionStatus .ID != "" {
273283 instanceStatus , err = computeService .GetInstanceStatus (openStackCluster .Status .Bastion .ID )
274284 if err != nil {
275285 return err
@@ -308,18 +318,18 @@ func deleteBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStac
308318 }
309319 }
310320
311- if openStackCluster . Status . Bastion != nil && len ( openStackCluster . Status . Bastion . Resources . Ports ) > 0 {
321+ if bastionStatus != nil && bastionStatus . Resources != nil {
312322 trunkSupported , err := networkingService .IsTrunkExtSupported ()
313323 if err != nil {
314324 return err
315325 }
316- for _ , port := range openStackCluster . Status . Bastion .Resources .Ports {
326+ for _ , port := range bastionStatus .Resources .Ports {
317327 if err := networkingService .DeleteInstanceTrunkAndPort (openStackCluster , port , trunkSupported ); err != nil {
318328 handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete port: %w" , err ))
319329 return fmt .Errorf ("failed to delete port: %w" , err )
320330 }
321331 }
322- openStackCluster . Status . Bastion .Resources .Ports = nil
332+ bastionStatus .Resources .Ports = nil
323333 }
324334
325335 scope .Logger ().Info ("Deleted Bastion" )
@@ -542,7 +552,10 @@ func bastionToInstanceSpec(openStackCluster *infrav1.OpenStackCluster, cluster *
542552 // v1beta1 API validations prevent this from happening in normal circumstances.
543553 bastion .Spec = & infrav1.OpenStackMachineSpec {}
544554 }
545- resolved := & openStackCluster .Status .Bastion .Resolved
555+ resolved := openStackCluster .Status .Bastion .Resolved
556+ if resolved == nil {
557+ return nil , errors .New ("bastion resolved is nil" )
558+ }
546559
547560 machineSpec := bastion .Spec
548561 instanceSpec := & compute.InstanceSpec {
@@ -579,7 +592,10 @@ func getBastionSecurityGroupID(openStackCluster *infrav1.OpenStackCluster) *stri
579592
580593func getOrCreateBastionPorts (openStackCluster * infrav1.OpenStackCluster , networkingService * networking.Service ) error {
581594 desiredPorts := openStackCluster .Status .Bastion .Resolved .Ports
582- resources := & openStackCluster .Status .Bastion .Resources
595+ resources := openStackCluster .Status .Bastion .Resources
596+ if resources == nil {
597+ return errors .New ("bastion resources are nil" )
598+ }
583599
584600 if len (desiredPorts ) == len (resources .Ports ) {
585601 return nil
0 commit comments