Skip to content

Commit 784afd0

Browse files
committed
feat: add CEL validation for CRO placement scope
Signed-off-by: Wantong Jiang <[email protected]>
1 parent 570b44c commit 784afd0

10 files changed

+796
-4
lines changed

CLAUDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ cmd/memberagent/ # Member agent main and setup
154154
- Use existing patterns from similar controllers when adding new functionality
155155
- Property providers should implement the `PropertyProvider` interface
156156
- PR titles must use prefixes: `feat:`, `fix:`, `docs:`, `test:`, `chore:`, `ci:`, `perf:`, `refactor:`, `revert:`
157+
- When creating new files, always add an empty line at the end
157158

158159
## Testing Patterns
159160

apis/placement/v1alpha1/override_types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
// +genclient:nonNamespaced
2828
// +kubebuilder:object:root=true
2929
// +kubebuilder:resource:scope="Cluster",categories={fleet,fleet-placement}
30+
// +kubebuilder:validation:XValidation:rule="!has(self.spec.placement) || self.spec.placement.scope != 'Namespaced'",message="clusterResourceOverride placement reference cannot be Namespaced scope"
3031
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
3132

3233
// ClusterResourceOverride defines a group of override policies about how to override the selected cluster scope resources

apis/placement/v1beta1/override_types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
// +kubebuilder:object:root=true
2727
// +kubebuilder:storageversion
2828
// +kubebuilder:resource:scope="Cluster",categories={fleet,fleet-placement}
29+
// +kubebuilder:validation:XValidation:rule="!has(self.spec.placement) || self.spec.placement.scope != 'Namespaced'",message="clusterResourceOverride placement reference cannot be Namespaced scope"
2930
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
3031

3132
// ClusterResourceOverride defines a group of override policies about how to override the selected cluster scope resources

config/crd/bases/placement.kubernetes-fleet.io_clusterresourceoverrides.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,9 @@ spec:
727727
required:
728728
- spec
729729
type: object
730+
x-kubernetes-validations:
731+
- message: clusterResourceOverride placement reference cannot be Namespaced scope
732+
rule: '!has(self.spec.placement) || self.spec.placement.scope != ''Namespaced'''
730733
served: true
731734
storage: false
732735
- name: v1beta1
@@ -1088,5 +1091,8 @@ spec:
10881091
required:
10891092
- spec
10901093
type: object
1094+
x-kubernetes-validations:
1095+
- message: clusterResourceOverride placement reference cannot be Namespaced scope
1096+
rule: '!has(self.spec.placement) || self.spec.placement.scope != ''Namespaced'''
10911097
served: true
10921098
storage: true

config/crd/bases/placement.kubernetes-fleet.io_clusterresourceplacements.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2086,8 +2086,8 @@ spec:
20862086
N placement statuses where N = ClusterNames.
20872087
In these cases, some of them may not have assigned clusters when we cannot fill the required number of clusters.
20882088
items:
2089-
description: ResourcePlacementStatus represents the placement status
2090-
of selected resources for one target cluster.
2089+
description: PerClusterPlacementStatus represents the placement
2090+
status of selected resources for one target cluster.
20912091
properties:
20922092
applicableClusterResourceOverrides:
20932093
description: |-

config/crd/bases/placement.kubernetes-fleet.io_resourceplacements.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,8 +1016,8 @@ spec:
10161016
N placement statuses where N = ClusterNames.
10171017
In these cases, some of them may not have assigned clusters when we cannot fill the required number of clusters.
10181018
items:
1019-
description: ResourcePlacementStatus represents the placement status
1020-
of selected resources for one target cluster.
1019+
description: PerClusterPlacementStatus represents the placement
1020+
status of selected resources for one target cluster.
10211021
properties:
10221022
applicableClusterResourceOverrides:
10231023
description: |-

0 commit comments

Comments
 (0)