@@ -227,8 +227,13 @@ func resolveBastionResources(scope *scope.WithLogger, clusterResourceName string
227
227
if openStackCluster .Spec .Bastion .Spec == nil {
228
228
return false , fmt .Errorf ("bastion spec is nil when bastion is enabled, this shouldn't happen" )
229
229
}
230
+ resolved := openStackCluster .Status .Bastion .Resolved
231
+ if resolved == nil {
232
+ resolved = & infrav1.ResolvedMachineSpec {}
233
+ openStackCluster .Status .Bastion .Resolved = resolved
234
+ }
230
235
changed , err := compute .ResolveMachineSpec (scope ,
231
- openStackCluster .Spec .Bastion .Spec , & openStackCluster . Status . Bastion . Resolved ,
236
+ openStackCluster .Spec .Bastion .Spec , resolved ,
232
237
clusterResourceName , bastionName (clusterResourceName ),
233
238
openStackCluster , getBastionSecurityGroupID (openStackCluster ))
234
239
if err != nil {
@@ -238,10 +243,13 @@ func resolveBastionResources(scope *scope.WithLogger, clusterResourceName string
238
243
// If the resolved machine spec changed we need to restart the reconcile to avoid inconsistencies between reconciles.
239
244
return true , nil
240
245
}
246
+ resources := openStackCluster .Status .Bastion .Resources
247
+ if resources == nil {
248
+ resources = & infrav1.MachineResources {}
249
+ openStackCluster .Status .Bastion .Resources = resources
250
+ }
241
251
242
- err = compute .AdoptMachineResources (scope ,
243
- & openStackCluster .Status .Bastion .Resolved ,
244
- & openStackCluster .Status .Bastion .Resources )
252
+ err = compute .AdoptMachineResources (scope , resolved , resources )
245
253
if err != nil {
246
254
return false , err
247
255
}
@@ -268,8 +276,10 @@ func deleteBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStac
268
276
}
269
277
}
270
278
279
+ bastionStatus := openStackCluster .Status .Bastion
280
+
271
281
var instanceStatus * compute.InstanceStatus
272
- if openStackCluster . Status . Bastion != nil && openStackCluster . Status . Bastion .ID != "" {
282
+ if bastionStatus != nil && bastionStatus .ID != "" {
273
283
instanceStatus , err = computeService .GetInstanceStatus (openStackCluster .Status .Bastion .ID )
274
284
if err != nil {
275
285
return err
@@ -308,18 +318,18 @@ func deleteBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStac
308
318
}
309
319
}
310
320
311
- if openStackCluster . Status . Bastion != nil && len ( openStackCluster . Status . Bastion . Resources . Ports ) > 0 {
321
+ if bastionStatus != nil && bastionStatus . Resources != nil {
312
322
trunkSupported , err := networkingService .IsTrunkExtSupported ()
313
323
if err != nil {
314
324
return err
315
325
}
316
- for _ , port := range openStackCluster . Status . Bastion .Resources .Ports {
326
+ for _ , port := range bastionStatus .Resources .Ports {
317
327
if err := networkingService .DeleteInstanceTrunkAndPort (openStackCluster , port , trunkSupported ); err != nil {
318
328
handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete port: %w" , err ))
319
329
return fmt .Errorf ("failed to delete port: %w" , err )
320
330
}
321
331
}
322
- openStackCluster . Status . Bastion .Resources .Ports = nil
332
+ bastionStatus .Resources .Ports = nil
323
333
}
324
334
325
335
scope .Logger ().Info ("Deleted Bastion" )
@@ -542,7 +552,10 @@ func bastionToInstanceSpec(openStackCluster *infrav1.OpenStackCluster, cluster *
542
552
// v1beta1 API validations prevent this from happening in normal circumstances.
543
553
bastion .Spec = & infrav1.OpenStackMachineSpec {}
544
554
}
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
+ }
546
559
547
560
machineSpec := bastion .Spec
548
561
instanceSpec := & compute.InstanceSpec {
@@ -579,7 +592,10 @@ func getBastionSecurityGroupID(openStackCluster *infrav1.OpenStackCluster) *stri
579
592
580
593
func getOrCreateBastionPorts (openStackCluster * infrav1.OpenStackCluster , networkingService * networking.Service ) error {
581
594
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
+ }
583
599
584
600
if len (desiredPorts ) == len (resources .Ports ) {
585
601
return nil
0 commit comments