diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go index 1dc8562a09a..87c86cf3c32 100644 --- a/pkg/api/validation/validation.go +++ b/pkg/api/validation/validation.go @@ -480,6 +480,11 @@ func ValidateReplicationControllerSpec(spec *api.ReplicationControllerSpec) errs } allErrs = append(allErrs, validateLabels(spec.Template.Labels).Prefix("template.labels")...) allErrs = append(allErrs, ValidatePodTemplateSpec(spec.Template).Prefix("template")...) + // TODO: Provide better error message, current message is not intuitive: + // e.g. "spec.template.restartPolicy: invalid value '{ 0xe68308}" + if spec.Template.Spec.RestartPolicy.OnFailure != nil || spec.Template.Spec.RestartPolicy.Never != nil { + allErrs = append(allErrs, errs.NewFieldInvalid("template.restartPolicy", spec.Template.Spec.RestartPolicy)) + } } return allErrs } diff --git a/pkg/api/validation/validation_test.go b/pkg/api/validation/validation_test.go index c75bad7de36..31cc120a0b9 100644 --- a/pkg/api/validation/validation_test.go +++ b/pkg/api/validation/validation_test.go @@ -878,7 +878,11 @@ func TestValidateReplicationController(t *testing.T) { invalidSelector := map[string]string{"NoUppercaseOrSpecialCharsLike=Equals": "b"} invalidPodTemplate := api.PodTemplate{ Spec: api.PodTemplateSpec{ - Spec: api.PodSpec{}, + Spec: api.PodSpec{ + RestartPolicy: api.RestartPolicy{ + Always: &api.RestartPolicyAlways{}, + }, + }, ObjectMeta: api.ObjectMeta{ Labels: invalidSelector, }, @@ -979,6 +983,44 @@ func TestValidateReplicationController(t *testing.T) { Template: &invalidPodTemplate.Spec, }, }, + "invalid restart policy 1": { + ObjectMeta: api.ObjectMeta{ + Name: "abc-123", + Namespace: api.NamespaceDefault, + }, + Spec: api.ReplicationControllerSpec{ + Selector: validSelector, + Template: &api.PodTemplateSpec{ + Spec: api.PodSpec{ + RestartPolicy: api.RestartPolicy{ + OnFailure: &api.RestartPolicyOnFailure{}, + }, + }, + ObjectMeta: api.ObjectMeta{ + Labels: validSelector, + }, + }, + }, + }, + "invalid restart policy 2": { + ObjectMeta: api.ObjectMeta{ + Name: "abc-123", + Namespace: api.NamespaceDefault, + }, + Spec: api.ReplicationControllerSpec{ + Selector: validSelector, + Template: &api.PodTemplateSpec{ + Spec: api.PodSpec{ + RestartPolicy: api.RestartPolicy{ + Never: &api.RestartPolicyNever{}, + }, + }, + ObjectMeta: api.ObjectMeta{ + Labels: validSelector, + }, + }, + }, + }, } for k, v := range errorCases { errs := ValidateReplicationController(&v)