Skip to content

Commit bb56b29

Browse files
committed
feat: add CEL validation for CRO placement scope
Signed-off-by: Wantong Jiang <[email protected]>
1 parent 8f12258 commit bb56b29

10 files changed

+793
-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
@@ -735,6 +735,9 @@ spec:
735735
required:
736736
- spec
737737
type: object
738+
x-kubernetes-validations:
739+
- message: clusterResourceOverride placement reference cannot be Namespaced scope
740+
rule: '!has(self.spec.placement) || self.spec.placement.scope != ''Namespaced'''
738741
served: true
739742
storage: false
740743
- name: v1beta1
@@ -1104,5 +1107,8 @@ spec:
11041107
required:
11051108
- spec
11061109
type: object
1110+
x-kubernetes-validations:
1111+
- message: clusterResourceOverride placement reference cannot be Namespaced scope
1112+
rule: '!has(self.spec.placement) || self.spec.placement.scope != ''Namespaced'''
11071113
served: true
11081114
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
@@ -2094,8 +2094,8 @@ spec:
20942094
N placement statuses where N = ClusterNames.
20952095
In these cases, some of them may not have assigned clusters when we cannot fill the required number of clusters.
20962096
items:
2097-
description: ResourcePlacementStatus represents the placement status
2098-
of selected resources for one target cluster.
2097+
description: PerClusterPlacementStatus represents the placement
2098+
status of selected resources for one target cluster.
20992099
properties:
21002100
applicableClusterResourceOverrides:
21012101
description: |-

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,8 +1024,8 @@ spec:
10241024
N placement statuses where N = ClusterNames.
10251025
In these cases, some of them may not have assigned clusters when we cannot fill the required number of clusters.
10261026
items:
1027-
description: ResourcePlacementStatus represents the placement status
1028-
of selected resources for one target cluster.
1027+
description: PerClusterPlacementStatus represents the placement
1028+
status of selected resources for one target cluster.
10291029
properties:
10301030
applicableClusterResourceOverrides:
10311031
description: |-

0 commit comments

Comments
 (0)