Skip to content

Commit 27e0ff5

Browse files
committed
kubebuilder validations for DRAResources
Signed-off-by: Varun Ramachandra Sekar <[email protected]>
1 parent 33fb25b commit 27e0ff5

File tree

7 files changed

+77
-0
lines changed

7 files changed

+77
-0
lines changed

api/apps/v1alpha1/common_types.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,12 +245,17 @@ type PersistentVolumeClaim struct {
245245
//
246246
// When creating the NIMService pods, it adds a name (`DNS_LABEL` format) to it
247247
// that uniquely identifies the DRA resource.
248+
// +kubebuilder:validation:XValidation:rule="has(self.resourceClaimName) != has(self.resourceClaimTemplateName)",message="exactly one of spec.resourceClaimName and spec.resourceClaimTemplateName must be set."
248249
type DRAResource struct {
249250
// ResourceClaimName is the name of a ResourceClaim object in the same
250251
// namespace as the NIMService.
251252
//
252253
// Exactly one of ResourceClaimName and ResourceClaimTemplateName must
253254
// be set.
255+
//
256+
// +kubebuilder:validation:MinLength=1
257+
// +kubebuilder:validation:MaxLength=253
258+
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*`
254259
ResourceClaimName *string `json:"resourceClaimName,omitempty"`
255260

256261
// ResourceClaimTemplateName is the name of a ResourceClaimTemplate
@@ -261,12 +266,18 @@ type DRAResource struct {
261266
//
262267
// Exactly one of ResourceClaimName and ResourceClaimTemplateName must
263268
// be set.
269+
//
270+
// +kubebuilder:validation:MinLength=1
271+
// +kubebuilder:validation:MaxLength=253
272+
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*`
264273
ResourceClaimTemplateName *string `json:"resourceClaimTemplateName,omitempty"`
265274

266275
// Requests is the list of requests in the referenced ResourceClaim/ResourceClaimTemplate
267276
// to be made available to the model container of the NIMService pods.
268277
//
269278
// If empty, everything from the claim is made available, otherwise
270279
// only the result of this subset of requests.
280+
//
281+
// +kubebuilder:validation:items:MinLength=1
271282
Requests []string `json:"requests,omitempty"`
272283
}

bundle/manifests/apps.nvidia.com_nimpipelines.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ spec:
120120
If empty, everything from the claim is made available, otherwise
121121
only the result of this subset of requests.
122122
items:
123+
minLength: 1
123124
type: string
124125
type: array
125126
resourceClaimName:
@@ -129,6 +130,9 @@ spec:
129130
130131
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
131132
be set.
133+
maxLength: 253
134+
minLength: 1
135+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
132136
type: string
133137
resourceClaimTemplateName:
134138
description: |-
@@ -140,8 +144,15 @@ spec:
140144
141145
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
142146
be set.
147+
maxLength: 253
148+
minLength: 1
149+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
143150
type: string
144151
type: object
152+
x-kubernetes-validations:
153+
- message: exactly one of spec.resourceClaimName and spec.resourceClaimTemplateName
154+
must be set.
155+
rule: has(self.resourceClaimName) != has(self.resourceClaimTemplateName)
145156
type: array
146157
env:
147158
items:

bundle/manifests/apps.nvidia.com_nimservices.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ spec:
8181
If empty, everything from the claim is made available, otherwise
8282
only the result of this subset of requests.
8383
items:
84+
minLength: 1
8485
type: string
8586
type: array
8687
resourceClaimName:
@@ -90,6 +91,9 @@ spec:
9091
9192
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
9293
be set.
94+
maxLength: 253
95+
minLength: 1
96+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
9397
type: string
9498
resourceClaimTemplateName:
9599
description: |-
@@ -101,8 +105,15 @@ spec:
101105
102106
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
103107
be set.
108+
maxLength: 253
109+
minLength: 1
110+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
104111
type: string
105112
type: object
113+
x-kubernetes-validations:
114+
- message: exactly one of spec.resourceClaimName and spec.resourceClaimTemplateName
115+
must be set.
116+
rule: has(self.resourceClaimName) != has(self.resourceClaimTemplateName)
106117
type: array
107118
env:
108119
items:

config/crd/bases/apps.nvidia.com_nimpipelines.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ spec:
120120
If empty, everything from the claim is made available, otherwise
121121
only the result of this subset of requests.
122122
items:
123+
minLength: 1
123124
type: string
124125
type: array
125126
resourceClaimName:
@@ -129,6 +130,9 @@ spec:
129130
130131
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
131132
be set.
133+
maxLength: 253
134+
minLength: 1
135+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
132136
type: string
133137
resourceClaimTemplateName:
134138
description: |-
@@ -140,8 +144,15 @@ spec:
140144
141145
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
142146
be set.
147+
maxLength: 253
148+
minLength: 1
149+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
143150
type: string
144151
type: object
152+
x-kubernetes-validations:
153+
- message: exactly one of spec.resourceClaimName and spec.resourceClaimTemplateName
154+
must be set.
155+
rule: has(self.resourceClaimName) != has(self.resourceClaimTemplateName)
145156
type: array
146157
env:
147158
items:

config/crd/bases/apps.nvidia.com_nimservices.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ spec:
8181
If empty, everything from the claim is made available, otherwise
8282
only the result of this subset of requests.
8383
items:
84+
minLength: 1
8485
type: string
8586
type: array
8687
resourceClaimName:
@@ -90,6 +91,9 @@ spec:
9091
9192
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
9293
be set.
94+
maxLength: 253
95+
minLength: 1
96+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
9397
type: string
9498
resourceClaimTemplateName:
9599
description: |-
@@ -101,8 +105,15 @@ spec:
101105
102106
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
103107
be set.
108+
maxLength: 253
109+
minLength: 1
110+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
104111
type: string
105112
type: object
113+
x-kubernetes-validations:
114+
- message: exactly one of spec.resourceClaimName and spec.resourceClaimTemplateName
115+
must be set.
116+
rule: has(self.resourceClaimName) != has(self.resourceClaimTemplateName)
106117
type: array
107118
env:
108119
items:

deployments/helm/k8s-nim-operator/crds/apps.nvidia.com_nimpipelines.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ spec:
120120
If empty, everything from the claim is made available, otherwise
121121
only the result of this subset of requests.
122122
items:
123+
minLength: 1
123124
type: string
124125
type: array
125126
resourceClaimName:
@@ -129,6 +130,9 @@ spec:
129130
130131
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
131132
be set.
133+
maxLength: 253
134+
minLength: 1
135+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
132136
type: string
133137
resourceClaimTemplateName:
134138
description: |-
@@ -140,8 +144,15 @@ spec:
140144
141145
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
142146
be set.
147+
maxLength: 253
148+
minLength: 1
149+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
143150
type: string
144151
type: object
152+
x-kubernetes-validations:
153+
- message: exactly one of spec.resourceClaimName and spec.resourceClaimTemplateName
154+
must be set.
155+
rule: has(self.resourceClaimName) != has(self.resourceClaimTemplateName)
145156
type: array
146157
env:
147158
items:

deployments/helm/k8s-nim-operator/crds/apps.nvidia.com_nimservices.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ spec:
8181
If empty, everything from the claim is made available, otherwise
8282
only the result of this subset of requests.
8383
items:
84+
minLength: 1
8485
type: string
8586
type: array
8687
resourceClaimName:
@@ -90,6 +91,9 @@ spec:
9091
9192
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
9293
be set.
94+
maxLength: 253
95+
minLength: 1
96+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
9397
type: string
9498
resourceClaimTemplateName:
9599
description: |-
@@ -101,8 +105,15 @@ spec:
101105
102106
Exactly one of ResourceClaimName and ResourceClaimTemplateName must
103107
be set.
108+
maxLength: 253
109+
minLength: 1
110+
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
104111
type: string
105112
type: object
113+
x-kubernetes-validations:
114+
- message: exactly one of spec.resourceClaimName and spec.resourceClaimTemplateName
115+
must be set.
116+
rule: has(self.resourceClaimName) != has(self.resourceClaimTemplateName)
106117
type: array
107118
env:
108119
items:

0 commit comments

Comments
 (0)