Skip to content

Commit 2ed49ac

Browse files
committed
RegisteredLimit Actuator mutability
On-behalf-of: SAP nils.gondermann@sap.com
1 parent 8fea6e7 commit 2ed49ac

9 files changed

Lines changed: 48 additions & 21 deletions

File tree

api/v1alpha1/registeredlimit_types.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ type RegisteredLimitResourceSpec struct {
4040
// +kubebuilder:validation:Minimum=-1
4141
// +kubebuilder:validation:Maximum=2147483647
4242
// +required
43-
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="defaultLimit is immutable"
4443
DefaultLimit *int32 `json:"defaultLimit,omitempty"`
4544
}
4645

config/crd/bases/openstack.k-orc.cloud_registeredlimits.yaml

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

internal/controllers/registeredlimit/actuator.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,7 @@ func (actuator registeredlimitActuator) updateResource(ctx context.Context, obj
191191
updateOpts := registeredlimits.UpdateOpts{}
192192

193193
handleDescriptionUpdate(&updateOpts, resource, osResource)
194-
195-
// TODO(scaffolding): add handler for all fields supporting mutability
194+
handleDefaultLimitUpdate(&updateOpts, resource, osResource)
196195

197196
needsUpdate, err := needsUpdate(updateOpts)
198197
if err != nil {
@@ -237,6 +236,13 @@ func handleDescriptionUpdate(updateOpts *registeredlimits.UpdateOpts, resource *
237236
}
238237
}
239238

239+
func handleDefaultLimitUpdate(updateOpts *registeredlimits.UpdateOpts, resource *resourceSpecT, osResource *osResourceT) {
240+
defaultLimit := int(*resource.DefaultLimit)
241+
if osResource.DefaultLimit != defaultLimit {
242+
updateOpts.DefaultLimit = &defaultLimit
243+
}
244+
}
245+
240246
func (actuator registeredlimitActuator) GetResourceReconcilers(ctx context.Context, orcObject orcObjectPT, osResource *osResourceT, controller interfaces.ResourceController) ([]resourceReconciler, progress.ReconcileStatus) {
241247
return []resourceReconciler{
242248
actuator.updateResource,

internal/controllers/registeredlimit/actuator_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,33 @@ func TestNeedsUpdate(t *testing.T) {
5252
}
5353
}
5454

55+
func TestHandleDefaultLimitUpdate(t *testing.T) {
56+
testCases := []struct {
57+
name string
58+
newValue int
59+
existingValue int
60+
expectChange bool
61+
}{
62+
{name: "Identical", newValue: 1, existingValue: 1, expectChange: false},
63+
{name: "Different", newValue: 2, existingValue: 1, expectChange: true},
64+
}
65+
66+
for _, tt := range testCases {
67+
t.Run(tt.name, func(t *testing.T) {
68+
resource := &orcv1alpha1.RegisteredLimitResourceSpec{DefaultLimit: ptr.To(int32(tt.newValue))}
69+
osResource := &osResourceT{DefaultLimit: tt.existingValue}
70+
71+
updateOpts := registeredlimits.UpdateOpts{}
72+
handleDefaultLimitUpdate(&updateOpts, resource, osResource)
73+
74+
got, _ := needsUpdate(updateOpts)
75+
if got != tt.expectChange {
76+
t.Errorf("Expected change: %v, got: %v", tt.expectChange, got)
77+
}
78+
})
79+
}
80+
}
81+
5582
func TestHandleDescriptionUpdate(t *testing.T) {
5683
ptrToDescription := ptr.To[string]
5784
testCases := []struct {

internal/controllers/registeredlimit/tests/registeredlimit-update/00-assert.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ metadata:
1515
name: registeredlimit-update
1616
status:
1717
resource:
18-
name: registeredlimit-update
19-
# TODO(scaffolding): Add matches for more fields
18+
resourceName: vcpus
19+
defaultLimit: 5
2020
conditions:
2121
- type: Available
2222
status: "True"

internal/controllers/registeredlimit/tests/registeredlimit-update/00-minimal-resource.yaml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,22 @@ metadata:
55
name: registeredlimit-update
66
spec:
77
cloudCredentialsRef:
8-
# TODO(scaffolding): Use openstack-admin if the resource needs admin credentials to be created
9-
cloudName: openstack
8+
cloudName: openstack-admin
109
secretName: openstack-clouds
1110
managementPolicy: managed
12-
# TODO(scaffolding): Add the necessary fields to create the resource
13-
resource: {}
11+
resource:
12+
type: registeredlimit-update
1413
---
1514
apiVersion: openstack.k-orc.cloud/v1alpha1
1615
kind: RegisteredLimit
1716
metadata:
1817
name: registeredlimit-update
1918
spec:
2019
cloudCredentialsRef:
21-
# TODO(scaffolding): Use openstack-admin if the resource needs admin credentials to be created or updated
22-
cloudName: openstack
20+
cloudName: openstack-admin
2321
secretName: openstack-clouds
2422
managementPolicy: managed
25-
# TODO(scaffolding): Only add the mandatory fields. It's possible the resource
26-
# doesn't have mandatory fields, in that case, leave it empty.
2723
resource:
24+
resourceName: vcpus
25+
defaultLimit: 5
2826
serviceRef: registeredlimit-update

internal/controllers/registeredlimit/tests/registeredlimit-update/01-assert.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ metadata:
55
name: registeredlimit-update
66
status:
77
resource:
8-
name: registeredlimit-update-updated
98
description: registeredlimit-update-updated
10-
# TODO(scaffolding): match all fields that were modified
9+
resourceName: vcpus
10+
defaultLimit: 10
1111
conditions:
1212
- type: Available
1313
status: "True"

internal/controllers/registeredlimit/tests/registeredlimit-update/01-updated-resource.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ spec:
77
resource:
88
name: registeredlimit-update-updated
99
description: registeredlimit-update-updated
10-
# TODO(scaffolding): update all mutable fields
10+
defaultLimit: 10

internal/controllers/registeredlimit/tests/registeredlimit-update/02-assert.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ metadata:
1515
name: registeredlimit-update
1616
status:
1717
resource:
18-
name: registeredlimit-update
19-
# TODO(scaffolding): validate that updated fields were all reverted to their original value
18+
resourceName: vcpus
19+
defaultLimit: 5
2020
conditions:
2121
- type: Available
2222
status: "True"

0 commit comments

Comments
 (0)