Skip to content

Commit 93ecc04

Browse files
committed
make rollout strategy immutable
Signed-off-by: Britania Rodriguez Reyes <[email protected]>
1 parent 6f3e972 commit 93ecc04

File tree

4 files changed

+16
-1
lines changed

4 files changed

+16
-1
lines changed

apis/placement/v1beta1/clusterresourceplacement_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,9 +524,9 @@ const (
524524
type RolloutStrategy struct {
525525
// Type of rollout. The only supported types are "RollingUpdate" and "External".
526526
// Default is "RollingUpdate".
527-
// +kubebuilder:validation:Optional
528527
// +kubebuilder:default=RollingUpdate
529528
// +kubebuilder:validation:Enum=RollingUpdate;External
529+
// +kubebuilder:validation:XValidation:rule="!(self != oldSelf)",message="rollout strategy type is immutable"
530530
Type RolloutStrategyType `json:"type,omitempty"`
531531

532532
// Rolling update config params. Present only if RolloutStrategyType = RollingUpdate.

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2482,6 +2482,9 @@ spec:
24822482
- RollingUpdate
24832483
- External
24842484
type: string
2485+
x-kubernetes-validations:
2486+
- message: rollout strategy type is immutable
2487+
rule: '!(self != oldSelf)'
24852488
type: object
24862489
required:
24872490
- resourceSelectors

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,9 @@ spec:
992992
- RollingUpdate
993993
- External
994994
type: string
995+
x-kubernetes-validations:
996+
- message: rollout strategy type is immutable
997+
rule: '!(self != oldSelf)'
995998
type: object
996999
required:
9971000
- resourceSelectors

test/apis/placement/v1beta1/api_validation_integration_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,15 @@ var _ = Describe("Test placement v1beta1 API validation", func() {
166166
Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Update CRP call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8sErrors.StatusError{})))
167167
Expect(statusErr.ErrStatus.Message).Should(MatchRegexp("placement type is immutable"))
168168
})
169+
170+
It("should deny update of RolloutStrategy type", func() {
171+
// Default RolloutStrategy type is RollingUpdate
172+
crp.Spec.Strategy.Type = placementv1beta1.ExternalRolloutStrategyType
173+
err := hubClient.Update(ctx, &crp)
174+
var statusErr *k8sErrors.StatusError
175+
Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Update CRP call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8sErrors.StatusError{})))
176+
Expect(statusErr.ErrStatus.Message).Should(MatchRegexp("rollout strategy type is immutable"))
177+
})
169178
})
170179

171180
Context("Test ClusterResourcePlacement StatusReportingScope validation - create, allow cases", func() {

0 commit comments

Comments
 (0)