Skip to content

Commit 9d40ba2

Browse files
committed
API changes for Dependent & Referenced resources
1 parent a8425da commit 9d40ba2

14 files changed

+161
-122
lines changed

api/v1alpha5/conversion_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func TestConvertFrom(t *testing.T) {
7979
Spec: OpenStackMachineSpec{},
8080
ObjectMeta: metav1.ObjectMeta{
8181
Annotations: map[string]string{
82-
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"cloudName\":\"\",\"flavor\":\"\",\"image\":{}},\"status\":{\"dependentResources\":{},\"ready\":false,\"referencedResources\":{}}}",
82+
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"cloudName\":\"\",\"flavor\":\"\",\"image\":{}},\"status\":{\"ready\":false}}",
8383
},
8484
},
8585
},

api/v1alpha6/conversion.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,11 @@ func restorev1beta1ClusterStatus(previous *infrav1.OpenStackClusterStatus, dst *
129129
dst.WorkerSecurityGroup = previous.WorkerSecurityGroup
130130
dst.BastionSecurityGroup = previous.BastionSecurityGroup
131131

132-
if previous.Bastion != nil {
132+
if previous.Bastion != nil && previous.Bastion.ReferencedResources != nil {
133133
dst.Bastion.ReferencedResources = previous.Bastion.ReferencedResources
134134
}
135-
if previous.Bastion != nil && previous.Bastion.DependentResources.PortsStatus != nil {
136-
dst.Bastion.DependentResources.PortsStatus = previous.Bastion.DependentResources.PortsStatus
135+
if previous.Bastion != nil && previous.Bastion.DependentResources != nil {
136+
dst.Bastion.DependentResources = previous.Bastion.DependentResources
137137
}
138138
}
139139

@@ -389,13 +389,13 @@ var v1beta1OpenStackMachineRestorer = conversion.RestorerFor[*infrav1.OpenStackM
389389
restorev1beta1MachineSpec,
390390
),
391391
"depresources": conversion.UnconditionalFieldRestorer(
392-
func(c *infrav1.OpenStackMachine) *infrav1.DependentMachineResources {
392+
func(c *infrav1.OpenStackMachine) **infrav1.DependentMachineResources {
393393
return &c.Status.DependentResources
394394
},
395395
),
396396
// No equivalent in v1alpha6
397397
"refresources": conversion.UnconditionalFieldRestorer(
398-
func(c *infrav1.OpenStackMachine) *infrav1.ReferencedMachineResources {
398+
func(c *infrav1.OpenStackMachine) **infrav1.ReferencedMachineResources {
399399
return &c.Status.ReferencedResources
400400
},
401401
),

api/v1alpha7/conversion.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,12 @@ func restorev1beta1ClusterStatus(previous *infrav1.OpenStackClusterStatus, dst *
121121
restorev1beta1SecurityGroupStatus(previous.BastionSecurityGroup, dst.BastionSecurityGroup)
122122

123123
// ReferencedResources have no equivalent in v1alpha7
124-
if previous.Bastion != nil {
124+
if previous.Bastion != nil && previous.Bastion.ReferencedResources != nil {
125125
dst.Bastion.ReferencedResources = previous.Bastion.ReferencedResources
126126
}
127127

128-
if previous.Bastion != nil && previous.Bastion.DependentResources.PortsStatus != nil {
129-
dst.Bastion.DependentResources.PortsStatus = previous.Bastion.DependentResources.PortsStatus
128+
if previous.Bastion != nil && previous.Bastion.DependentResources != nil {
129+
dst.Bastion.DependentResources = previous.Bastion.DependentResources
130130
}
131131
}
132132

@@ -354,14 +354,14 @@ var v1beta1OpenStackMachineRestorer = conversion.RestorerFor[*infrav1.OpenStackM
354354
restorev1beta1MachineSpec,
355355
),
356356
"depresources": conversion.UnconditionalFieldRestorer(
357-
func(c *infrav1.OpenStackMachine) *infrav1.DependentMachineResources {
357+
func(c *infrav1.OpenStackMachine) **infrav1.DependentMachineResources {
358358
return &c.Status.DependentResources
359359
},
360360
),
361361

362362
// No equivalent in v1alpha7
363363
"refresources": conversion.UnconditionalFieldRestorer(
364-
func(c *infrav1.OpenStackMachine) *infrav1.ReferencedMachineResources {
364+
func(c *infrav1.OpenStackMachine) **infrav1.ReferencedMachineResources {
365365
return &c.Status.ReferencedResources
366366
},
367367
),

api/v1beta1/openstackmachine_types.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,10 @@ type OpenStackMachineStatus struct {
117117
InstanceState *InstanceState `json:"instanceState,omitempty"`
118118

119119
// ReferencedResources contains resolved references to resources that the machine depends on.
120-
ReferencedResources ReferencedMachineResources `json:"referencedResources,omitempty"`
120+
ReferencedResources *ReferencedMachineResources `json:"referencedResources,omitempty"`
121121

122122
// DependentResources contains resolved dependent resources that were created by the machine.
123-
DependentResources DependentMachineResources `json:"dependentResources,omitempty"`
123+
DependentResources *DependentMachineResources `json:"dependentResources,omitempty"`
124124

125125
FailureReason *errors.MachineStatusError `json:"failureReason,omitempty"`
126126

api/v1beta1/types.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,14 @@ type AddressPair struct {
190190
}
191191

192192
type BastionStatus struct {
193-
ID string `json:"id,omitempty"`
194-
Name string `json:"name,omitempty"`
195-
SSHKeyName string `json:"sshKeyName,omitempty"`
196-
State InstanceState `json:"state,omitempty"`
197-
IP string `json:"ip,omitempty"`
198-
FloatingIP string `json:"floatingIP,omitempty"`
199-
ReferencedResources ReferencedMachineResources `json:"referencedResources,omitempty"`
200-
DependentResources DependentMachineResources `json:"dependentResources,omitempty"`
193+
ID string `json:"id,omitempty"`
194+
Name string `json:"name,omitempty"`
195+
SSHKeyName string `json:"sshKeyName,omitempty"`
196+
State InstanceState `json:"state,omitempty"`
197+
IP string `json:"ip,omitempty"`
198+
FloatingIP string `json:"floatingIP,omitempty"`
199+
ReferencedResources *ReferencedMachineResources `json:"referencedResources,omitempty"`
200+
DependentResources *DependentMachineResources `json:"dependentResources,omitempty"`
201201
}
202202

203203
type RootVolume struct {

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 20 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controllers/openstackcluster_controller.go

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -123,24 +123,28 @@ func (r *OpenStackClusterReconciler) Reconcile(ctx context.Context, req ctrl.Req
123123
scope := scope.NewWithLogger(clientScope, log)
124124

125125
// Resolve and store referenced & dependent resources for the bastion
126-
if openStackCluster.Spec.Bastion != nil && openStackCluster.Spec.Bastion.Enabled {
126+
// Note: the bastion won't be created before networking is done, which is why we only adopt resources once we have a network in status.
127+
if openStackCluster.Spec.Bastion != nil && openStackCluster.Spec.Bastion.Enabled && openStackCluster.Status.Network != nil {
127128
if openStackCluster.Status.Bastion == nil {
128129
openStackCluster.Status.Bastion = &infrav1.BastionStatus{}
129130
}
130-
changed, err := compute.ResolveReferencedMachineResources(scope, openStackCluster, &openStackCluster.Spec.Bastion.Instance, &openStackCluster.Status.Bastion.ReferencedResources)
131-
if err != nil {
132-
return reconcile.Result{}, err
133-
}
134-
if changed {
131+
if openStackCluster.Status.Bastion.ReferencedResources == nil {
132+
openStackCluster.Status.Bastion.ReferencedResources = &infrav1.ReferencedMachineResources{}
133+
referencedResources, err := compute.ResolveReferencedMachineResources(scope, openStackCluster, &openStackCluster.Spec.Bastion.Instance, openStackCluster.Status.Bastion.ReferencedResources)
134+
if err != nil {
135+
return reconcile.Result{}, err
136+
}
137+
openStackCluster.Status.Bastion.ReferencedResources = referencedResources
135138
// If the referenced resources have changed, we need to update the OpenStackCluster status now.
136139
return reconcile.Result{}, nil
137140
}
138141

139-
changed, err = compute.ResolveDependentBastionResources(scope, openStackCluster, bastionName(cluster.Name))
140-
if err != nil {
141-
return reconcile.Result{}, err
142-
}
143-
if changed {
142+
if openStackCluster.Status.Bastion.DependentResources == nil {
143+
openStackCluster.Status.Bastion.DependentResources = &infrav1.DependentMachineResources{}
144+
err = compute.ResolveDependentBastionResources(scope, openStackCluster, bastionName(cluster.Name))
145+
if err != nil {
146+
return reconcile.Result{}, err
147+
}
144148
// If the dependent resources have changed, we need to update the OpenStackCluster status now.
145149
return reconcile.Result{}, nil
146150
}
@@ -292,7 +296,7 @@ func deleteBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStac
292296
}
293297
}
294298

295-
if openStackCluster.Status.Bastion != nil && len(openStackCluster.Status.Bastion.DependentResources.PortsStatus) > 0 {
299+
if openStackCluster.Status.Bastion != nil && openStackCluster.Status.Bastion.DependentResources != nil && len(openStackCluster.Status.Bastion.DependentResources.PortsStatus) > 0 {
296300
trunkSupported, err := networkingService.IsTrunkExtSupported()
297301
if err != nil {
298302
return err
@@ -403,7 +407,7 @@ func reconcileBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openS
403407
}
404408
}
405409

406-
err = getOrCreateBastionPorts(scope, cluster, openStackCluster, networkingService, cluster.Name)
410+
err = getOrCreateBastionPorts(cluster, openStackCluster, networkingService, cluster.Name)
407411
if err != nil {
408412
handleUpdateOSCError(openStackCluster, fmt.Errorf("failed to get or create ports for bastion: %w", err))
409413
return ctrl.Result{}, fmt.Errorf("failed to get or create ports for bastion: %w", err)
@@ -543,7 +547,7 @@ func getBastionSecurityGroups(openStackCluster *infrav1.OpenStackCluster) []infr
543547
return instanceSpecSecurityGroups
544548
}
545549

546-
func getOrCreateBastionPorts(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStackCluster *infrav1.OpenStackCluster, networkingService *networking.Service, clusterName string) error {
550+
func getOrCreateBastionPorts(cluster *clusterv1.Cluster, openStackCluster *infrav1.OpenStackCluster, networkingService *networking.Service, clusterName string) error {
547551
if openStackCluster.Status.Bastion == nil {
548552
openStackCluster.Status.Bastion = &infrav1.BastionStatus{}
549553
}

controllers/openstackcluster_controller_test.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ var _ = Describe("OpenStackCluster controller", func() {
231231
Expect(err).To(BeNil())
232232
testCluster.Status = infrav1.OpenStackClusterStatus{
233233
Bastion: &infrav1.BastionStatus{
234-
ReferencedResources: infrav1.ReferencedMachineResources{
234+
ReferencedResources: &infrav1.ReferencedMachineResources{
235235
ImageID: "imageID",
236236
PortsOpts: []infrav1.PortOpts{
237237
{
@@ -241,7 +241,7 @@ var _ = Describe("OpenStackCluster controller", func() {
241241
},
242242
},
243243
},
244-
DependentResources: infrav1.DependentMachineResources{
244+
DependentResources: &infrav1.DependentMachineResources{
245245
PortsStatus: []infrav1.PortStatus{
246246
{
247247
ID: "portID1",
@@ -282,7 +282,7 @@ var _ = Describe("OpenStackCluster controller", func() {
282282
Expect(testCluster.Status.Bastion).To(Equal(&infrav1.BastionStatus{
283283
ID: "adopted-bastion-uuid",
284284
State: "ACTIVE",
285-
ReferencedResources: infrav1.ReferencedMachineResources{
285+
ReferencedResources: &infrav1.ReferencedMachineResources{
286286
ImageID: "imageID",
287287
PortsOpts: []infrav1.PortOpts{
288288
{
@@ -292,7 +292,7 @@ var _ = Describe("OpenStackCluster controller", func() {
292292
},
293293
},
294294
},
295-
DependentResources: infrav1.DependentMachineResources{
295+
DependentResources: &infrav1.DependentMachineResources{
296296
PortsStatus: []infrav1.PortStatus{
297297
{
298298
ID: "portID1",
@@ -323,7 +323,7 @@ var _ = Describe("OpenStackCluster controller", func() {
323323
},
324324
Bastion: &infrav1.BastionStatus{
325325
ID: "adopted-fip-bastion-uuid",
326-
ReferencedResources: infrav1.ReferencedMachineResources{
326+
ReferencedResources: &infrav1.ReferencedMachineResources{
327327
ImageID: "imageID",
328328
PortsOpts: []infrav1.PortOpts{
329329
{
@@ -333,7 +333,7 @@ var _ = Describe("OpenStackCluster controller", func() {
333333
},
334334
},
335335
},
336-
DependentResources: infrav1.DependentMachineResources{
336+
DependentResources: &infrav1.DependentMachineResources{
337337
PortsStatus: []infrav1.PortStatus{
338338
{
339339
ID: "portID1",
@@ -367,7 +367,7 @@ var _ = Describe("OpenStackCluster controller", func() {
367367
ID: "adopted-fip-bastion-uuid",
368368
FloatingIP: "1.2.3.4",
369369
State: "ACTIVE",
370-
ReferencedResources: infrav1.ReferencedMachineResources{
370+
ReferencedResources: &infrav1.ReferencedMachineResources{
371371
ImageID: "imageID",
372372
PortsOpts: []infrav1.PortOpts{
373373
{
@@ -377,7 +377,7 @@ var _ = Describe("OpenStackCluster controller", func() {
377377
},
378378
},
379379
},
380-
DependentResources: infrav1.DependentMachineResources{
380+
DependentResources: &infrav1.DependentMachineResources{
381381
PortsStatus: []infrav1.PortStatus{
382382
{
383383
ID: "portID1",
@@ -408,7 +408,7 @@ var _ = Describe("OpenStackCluster controller", func() {
408408
},
409409
Bastion: &infrav1.BastionStatus{
410410
ID: "requeue-bastion-uuid",
411-
ReferencedResources: infrav1.ReferencedMachineResources{
411+
ReferencedResources: &infrav1.ReferencedMachineResources{
412412
ImageID: "imageID",
413413
PortsOpts: []infrav1.PortOpts{
414414
{
@@ -418,7 +418,7 @@ var _ = Describe("OpenStackCluster controller", func() {
418418
},
419419
},
420420
},
421-
DependentResources: infrav1.DependentMachineResources{
421+
DependentResources: &infrav1.DependentMachineResources{
422422
PortsStatus: []infrav1.PortStatus{
423423
{
424424
ID: "portID1",
@@ -446,7 +446,7 @@ var _ = Describe("OpenStackCluster controller", func() {
446446
Expect(testCluster.Status.Bastion).To(Equal(&infrav1.BastionStatus{
447447
ID: "requeue-bastion-uuid",
448448
State: "BUILD",
449-
ReferencedResources: infrav1.ReferencedMachineResources{
449+
ReferencedResources: &infrav1.ReferencedMachineResources{
450450
ImageID: "imageID",
451451
PortsOpts: []infrav1.PortOpts{
452452
{
@@ -456,7 +456,7 @@ var _ = Describe("OpenStackCluster controller", func() {
456456
},
457457
},
458458
},
459-
DependentResources: infrav1.DependentMachineResources{
459+
DependentResources: &infrav1.DependentMachineResources{
460460
PortsStatus: []infrav1.PortStatus{
461461
{
462462
ID: "portID1",
@@ -478,7 +478,7 @@ var _ = Describe("OpenStackCluster controller", func() {
478478
Expect(err).To(BeNil())
479479
testCluster.Status = infrav1.OpenStackClusterStatus{
480480
Bastion: &infrav1.BastionStatus{
481-
ReferencedResources: infrav1.ReferencedMachineResources{
481+
ReferencedResources: &infrav1.ReferencedMachineResources{
482482
ImageID: "imageID",
483483
},
484484
},
@@ -530,7 +530,7 @@ var _ = Describe("OpenStackCluster controller", func() {
530530
}
531531
testCluster.Status = infrav1.OpenStackClusterStatus{
532532
Bastion: &infrav1.BastionStatus{
533-
DependentResources: infrav1.DependentMachineResources{
533+
DependentResources: &infrav1.DependentMachineResources{
534534
PortsStatus: []infrav1.PortStatus{
535535
{
536536
ID: "port-id",
@@ -613,7 +613,7 @@ var _ = Describe("OpenStackCluster controller", func() {
613613
}
614614
testCluster.Status = infrav1.OpenStackClusterStatus{
615615
Bastion: &infrav1.BastionStatus{
616-
DependentResources: infrav1.DependentMachineResources{
616+
DependentResources: &infrav1.DependentMachineResources{
617617
PortsStatus: []infrav1.PortStatus{
618618
{
619619
ID: "port-id",

0 commit comments

Comments
 (0)