Skip to content

Commit a07661d

Browse files
committed
Add pod restart policy validation for replication controller.
1 parent c91306c commit a07661d

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

pkg/api/validation/validation.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,11 @@ func ValidateReplicationControllerSpec(spec *api.ReplicationControllerSpec) errs
480480
}
481481
allErrs = append(allErrs, validateLabels(spec.Template.Labels).Prefix("template.labels")...)
482482
allErrs = append(allErrs, ValidatePodTemplateSpec(spec.Template).Prefix("template")...)
483+
// TODO: Provide better error message, current message is not intuitive:
484+
// e.g. "spec.template.restartPolicy: invalid value '{<nil> <nil> 0xe68308}"
485+
if spec.Template.Spec.RestartPolicy.OnFailure != nil || spec.Template.Spec.RestartPolicy.Never != nil {
486+
allErrs = append(allErrs, errs.NewFieldInvalid("template.restartPolicy", spec.Template.Spec.RestartPolicy))
487+
}
483488
}
484489
return allErrs
485490
}

pkg/api/validation/validation_test.go

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -878,7 +878,11 @@ func TestValidateReplicationController(t *testing.T) {
878878
invalidSelector := map[string]string{"NoUppercaseOrSpecialCharsLike=Equals": "b"}
879879
invalidPodTemplate := api.PodTemplate{
880880
Spec: api.PodTemplateSpec{
881-
Spec: api.PodSpec{},
881+
Spec: api.PodSpec{
882+
RestartPolicy: api.RestartPolicy{
883+
Always: &api.RestartPolicyAlways{},
884+
},
885+
},
882886
ObjectMeta: api.ObjectMeta{
883887
Labels: invalidSelector,
884888
},
@@ -979,6 +983,44 @@ func TestValidateReplicationController(t *testing.T) {
979983
Template: &invalidPodTemplate.Spec,
980984
},
981985
},
986+
"invalid restart policy 1": {
987+
ObjectMeta: api.ObjectMeta{
988+
Name: "abc-123",
989+
Namespace: api.NamespaceDefault,
990+
},
991+
Spec: api.ReplicationControllerSpec{
992+
Selector: validSelector,
993+
Template: &api.PodTemplateSpec{
994+
Spec: api.PodSpec{
995+
RestartPolicy: api.RestartPolicy{
996+
OnFailure: &api.RestartPolicyOnFailure{},
997+
},
998+
},
999+
ObjectMeta: api.ObjectMeta{
1000+
Labels: validSelector,
1001+
},
1002+
},
1003+
},
1004+
},
1005+
"invalid restart policy 2": {
1006+
ObjectMeta: api.ObjectMeta{
1007+
Name: "abc-123",
1008+
Namespace: api.NamespaceDefault,
1009+
},
1010+
Spec: api.ReplicationControllerSpec{
1011+
Selector: validSelector,
1012+
Template: &api.PodTemplateSpec{
1013+
Spec: api.PodSpec{
1014+
RestartPolicy: api.RestartPolicy{
1015+
Never: &api.RestartPolicyNever{},
1016+
},
1017+
},
1018+
ObjectMeta: api.ObjectMeta{
1019+
Labels: validSelector,
1020+
},
1021+
},
1022+
},
1023+
},
9821024
}
9831025
for k, v := range errorCases {
9841026
errs := ValidateReplicationController(&v)

0 commit comments

Comments
 (0)