From 2eb4896858f8b08dc86cd31a75e312f6b9a92b05 Mon Sep 17 00:00:00 2001 From: Mike Danese Date: Sat, 26 Mar 2016 22:14:02 -0700 Subject: [PATCH] validate that daemonsets don't have empty selectors on creation --- pkg/apis/extensions/validation/validation.go | 3 +++ pkg/apis/extensions/validation/validation_test.go | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/pkg/apis/extensions/validation/validation.go b/pkg/apis/extensions/validation/validation.go index b87bff219f2..4981f96c35d 100644 --- a/pkg/apis/extensions/validation/validation.go +++ b/pkg/apis/extensions/validation/validation.go @@ -201,6 +201,9 @@ func ValidateDaemonSetSpec(spec *extensions.DaemonSetSpec, fldPath *field.Path) if err == nil && !selector.Matches(labels.Set(spec.Template.Labels)) { allErrs = append(allErrs, field.Invalid(fldPath.Child("template", "metadata", "labels"), spec.Template.Labels, "`selector` does not match template `labels`")) } + if spec.Selector != nil && len(spec.Selector.MatchLabels)+len(spec.Selector.MatchExpressions) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("selector"), spec.Selector, "empty selector is not valid for daemonset.")) + } allErrs = append(allErrs, apivalidation.ValidatePodTemplateSpec(&spec.Template, fldPath.Child("template"))...) // Daemons typically run on more than one node, so mark Read-Write persistent disks as invalid. diff --git a/pkg/apis/extensions/validation/validation_test.go b/pkg/apis/extensions/validation/validation_test.go index d7e8ebc0bda..5944cc40781 100644 --- a/pkg/apis/extensions/validation/validation_test.go +++ b/pkg/apis/extensions/validation/validation_test.go @@ -700,9 +700,16 @@ func TestValidateDaemonSet(t *testing.T) { Template: validPodTemplate.Template, }, }, + "nil selector": { + ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, + Spec: extensions.DaemonSetSpec{ + Template: validPodTemplate.Template, + }, + }, "empty selector": { ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, Spec: extensions.DaemonSetSpec{ + Selector: &unversioned.LabelSelector{}, Template: validPodTemplate.Template, }, },