Skip to content

Commit f2a7442

Browse files
authored
fix: add validation for CRP and PickFixed cluster names (#1190)
2 parents 74cd8cb + a7dfad3 commit f2a7442

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

pkg/utils/validator/clusterresourceplacement.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,13 @@ func validatePolicyForPickFixedPlacementType(policy *placementv1beta1.PlacementP
194194
}
195195
uniqueClusterNames := make(map[string]bool)
196196
for _, name := range policy.ClusterNames {
197+
nameErr := validation.IsDNS1123Subdomain(name)
198+
if nameErr != nil {
199+
allErr = append(allErr, fmt.Errorf("PickFixed cluster name %s is not a valid member name: %s", name, strings.Join(nameErr, "; ")))
200+
}
201+
if len(name) > validation.DNS1035LabelMaxLength {
202+
allErr = append(allErr, fmt.Errorf("PickFixed cluster name %s cannot have length exceeding %d", name, validation.DNS1035LabelMaxLength))
203+
}
197204
if _, ok := uniqueClusterNames[name]; ok {
198205
allErr = append(allErr, fmt.Errorf("cluster names must be unique for policy type %s", placementv1beta1.PickFixedPlacementType))
199206
break

pkg/utils/validator/clusterresourceplacement_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,22 @@ func TestValidateClusterResourcePlacement_PickFixedPlacementPolicy(t *testing.T)
514514
wantErr: true,
515515
wantErrMsg: "cluster names must be unique for policy type PickFixed",
516516
},
517+
"invalid placement policy - PickFixed with invalid cluster names": {
518+
policy: &placementv1beta1.PlacementPolicy{
519+
PlacementType: placementv1beta1.PickFixedPlacementType,
520+
ClusterNames: []string{"test@,cluster1"},
521+
},
522+
wantErr: true,
523+
wantErrMsg: "PickFixed cluster name test@,cluster1 is not a valid member name: a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')",
524+
},
525+
"invalid placement policy - PickFixed with too long cluster name": {
526+
policy: &placementv1beta1.PlacementPolicy{
527+
PlacementType: placementv1beta1.PickFixedPlacementType,
528+
ClusterNames: []string{"this-is-a-very-long-cluster-name-that-exceeds-the-maximum-allowed-length-for-dns-labels"},
529+
},
530+
wantErr: true,
531+
wantErrMsg: "PickFixed cluster name this-is-a-very-long-cluster-name-that-exceeds-the-maximum-allowed-length-for-dns-labels cannot have length exceeding 63",
532+
},
517533
"invalid placement policy - PickFixed with non nil number of clusters": {
518534
policy: &placementv1beta1.PlacementPolicy{
519535
PlacementType: placementv1beta1.PickFixedPlacementType,

0 commit comments

Comments
 (0)