From 8c558088eeae72a5941a387b8e90222f78003765 Mon Sep 17 00:00:00 2001 From: "Madhusudan.C.S" Date: Thu, 11 Feb 2016 12:51:26 -0800 Subject: [PATCH] Allow a DaemonSet pod template to be updated in storage. This should allow users to update DaemonSet pods by manually deleting the corresponding running pods. Users can use this mechanism for DaemonSet updates until we implement Deployment style rolling update for DaemonSet. --- pkg/apis/extensions/validation/validation.go | 16 ---------------- pkg/registry/daemonset/etcd/etcd_test.go | 6 +----- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/pkg/apis/extensions/validation/validation.go b/pkg/apis/extensions/validation/validation.go index c292d3eb36b..d9d86f91087 100644 --- a/pkg/apis/extensions/validation/validation.go +++ b/pkg/apis/extensions/validation/validation.go @@ -172,7 +172,6 @@ func ValidateDaemonSet(controller *extensions.DaemonSet) field.ErrorList { func ValidateDaemonSetUpdate(controller, oldController *extensions.DaemonSet) field.ErrorList { allErrs := apivalidation.ValidateObjectMetaUpdate(&controller.ObjectMeta, &oldController.ObjectMeta, field.NewPath("metadata")) allErrs = append(allErrs, ValidateDaemonSetSpec(&controller.Spec, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateDaemonSetTemplateUpdate(controller.Spec.Template, oldController.Spec.Template, field.NewPath("spec", "template"))...) return allErrs } @@ -192,21 +191,6 @@ func ValidateDaemonSetStatusUpdate(controller, oldController *extensions.DaemonS return allErrs } -// ValidateDaemonSetTemplateUpdate tests that certain fields in the daemon set's pod template are not updated. -func ValidateDaemonSetTemplateUpdate(podTemplate, oldPodTemplate api.PodTemplateSpec, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - podSpec := podTemplate.Spec - // podTemplate.Spec is not a pointer, so we can modify NodeSelector and NodeName directly. - podSpec.NodeSelector = oldPodTemplate.Spec.NodeSelector - podSpec.NodeName = oldPodTemplate.Spec.NodeName - // In particular, we do not allow updates to container images at this point. - if !api.Semantic.DeepEqual(oldPodTemplate.Spec, podSpec) { - // TODO: Pinpoint the specific field that causes the invalid error after we have strategic merge diff - allErrs = append(allErrs, field.Forbidden(fldPath.Child("spec"), "daemonSet updates may not change fields other than `nodeSelector`")) - } - return allErrs -} - // ValidateDaemonSetSpec tests if required fields in the DaemonSetSpec are set. func ValidateDaemonSetSpec(spec *extensions.DaemonSetSpec, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} diff --git a/pkg/registry/daemonset/etcd/etcd_test.go b/pkg/registry/daemonset/etcd/etcd_test.go index eef1207a397..933f8344c4d 100755 --- a/pkg/registry/daemonset/etcd/etcd_test.go +++ b/pkg/registry/daemonset/etcd/etcd_test.go @@ -103,6 +103,7 @@ func TestUpdate(t *testing.T) { func(obj runtime.Object) runtime.Object { object := obj.(*extensions.DaemonSet) object.Spec.Template.Spec.NodeSelector = map[string]string{"c": "d"} + object.Spec.Template.Spec.DNSPolicy = api.DNSDefault return object }, // invalid updateFunc @@ -121,11 +122,6 @@ func TestUpdate(t *testing.T) { object.Spec.Template.Spec.RestartPolicy = api.RestartPolicyOnFailure return object }, - func(obj runtime.Object) runtime.Object { - object := obj.(*extensions.DaemonSet) - object.Spec.Selector = &unversioned.LabelSelector{MatchLabels: map[string]string{}} - return object - }, ) }