Skip to content

Commit 614a5ea

Browse files
pedjakclaude
andauthored
api: replace manual XValidation CEL rule with ExactlyOneOf marker on ClusterObjectSetObject (#2620)
Use the +kubebuilder:validation:ExactlyOneOf={object,ref} marker introduced in controller-tools v0.19.0 instead of a hand-written CEL XValidation rule. The generated CEL expression is semantically equivalent. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 5d89b4e commit 614a5ea

4 files changed

Lines changed: 13 additions & 7 deletions

File tree

api/v1/clusterobjectset_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ type ClusterObjectSetPhase struct {
395395
//
396396
// Exactly one of object or ref must be set.
397397
//
398-
// +kubebuilder:validation:XValidation:rule="has(self.object) != has(self.ref)",message="exactly one of object or ref must be set"
398+
// +kubebuilder:validation:ExactlyOneOf={object,ref}
399399
type ClusterObjectSetObject struct {
400400
// object is an optional embedded Kubernetes object to be applied.
401401
//

helm/olmv1/base/operator-controller/crd/experimental/olm.operatorframework.io_clusterobjectsets.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,10 @@ spec:
232232
type: object
233233
type: object
234234
x-kubernetes-validations:
235-
- message: exactly one of object or ref must be set
236-
rule: has(self.object) != has(self.ref)
235+
- message: exactly one of the fields in [object ref] must
236+
be set
237+
rule: '[has(self.object),has(self.ref)].filter(x,x==true).size()
238+
== 1'
237239
maxItems: 50
238240
type: array
239241
required:

manifests/experimental-e2e.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1556,8 +1556,10 @@ spec:
15561556
type: object
15571557
type: object
15581558
x-kubernetes-validations:
1559-
- message: exactly one of object or ref must be set
1560-
rule: has(self.object) != has(self.ref)
1559+
- message: exactly one of the fields in [object ref] must
1560+
be set
1561+
rule: '[has(self.object),has(self.ref)].filter(x,x==true).size()
1562+
== 1'
15611563
maxItems: 50
15621564
type: array
15631565
required:

manifests/experimental.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,8 +1517,10 @@ spec:
15171517
type: object
15181518
type: object
15191519
x-kubernetes-validations:
1520-
- message: exactly one of object or ref must be set
1521-
rule: has(self.object) != has(self.ref)
1520+
- message: exactly one of the fields in [object ref] must
1521+
be set
1522+
rule: '[has(self.object),has(self.ref)].filter(x,x==true).size()
1523+
== 1'
15221524
maxItems: 50
15231525
type: array
15241526
required:

0 commit comments

Comments
 (0)