From 620310c12f3a8e00a649451744d525d2e9638078 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Ole=C5=9B?= Date: Thu, 23 Feb 2017 16:02:06 +0100 Subject: [PATCH] Move TemplateGeneration to the Spec --- pkg/apis/extensions/types.go | 10 +++++----- pkg/apis/extensions/v1beta1/types.go | 10 +++++----- pkg/apis/extensions/validation/validation.go | 1 + pkg/controller/daemon/daemoncontroller.go | 4 ++-- pkg/controller/daemon/daemoncontroller_test.go | 6 +++--- pkg/controller/daemon/update.go | 2 +- pkg/registry/extensions/daemonset/strategy.go | 8 +++++--- 7 files changed, 22 insertions(+), 19 deletions(-) diff --git a/pkg/apis/extensions/types.go b/pkg/apis/extensions/types.go index 0b634a1c967..d12a9d59854 100644 --- a/pkg/apis/extensions/types.go +++ b/pkg/apis/extensions/types.go @@ -441,6 +441,11 @@ type DaemonSetSpec struct { // is ready). // +optional MinReadySeconds int32 + + // A sequence number representing a specific generation of the template. + // Populated by the system. It can be set only during the creation. + // +optional + TemplateGeneration int64 } // DaemonSetStatus represents the current status of a daemon set. @@ -505,11 +510,6 @@ type DaemonSet struct { // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status // +optional Status DaemonSetStatus - - // A sequence number representing a specific generation of the template. - // Populated by the system. Read-only. - // +optional - TemplateGeneration int64 } const ( diff --git a/pkg/apis/extensions/v1beta1/types.go b/pkg/apis/extensions/v1beta1/types.go index 12bac51867b..700957931c4 100644 --- a/pkg/apis/extensions/v1beta1/types.go +++ b/pkg/apis/extensions/v1beta1/types.go @@ -440,6 +440,11 @@ type DaemonSetSpec struct { // is ready). // +optional MinReadySeconds int32 `json:"minReadySeconds,omitempty" protobuf:"varint,4,opt,name=minReadySeconds"` + + // A sequence number representing a specific generation of the template. + // Populated by the system. It can be set only during the creation. + // +optional + TemplateGeneration int64 `json:"templateGeneration,omitempty" protobuf:"varint,5,opt,name=templateGeneration"` } // DaemonSetStatus represents the current status of a daemon set. @@ -507,11 +512,6 @@ type DaemonSet struct { // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status // +optional Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` - - // A sequence number representing a specific generation of the template. - // Populated by the system. Read-only. - // +optional - TemplateGeneration int64 `json:"templateGeneration,omitempty" protobuf:"varint,4,opt,name=templateGeneration"` } const ( diff --git a/pkg/apis/extensions/validation/validation.go b/pkg/apis/extensions/validation/validation.go index 3f36ddffc79..3405a580ad7 100644 --- a/pkg/apis/extensions/validation/validation.go +++ b/pkg/apis/extensions/validation/validation.go @@ -145,6 +145,7 @@ func ValidateDaemonSetSpec(spec *extensions.DaemonSetSpec, fldPath *field.Path) allErrs = append(allErrs, field.NotSupported(fldPath.Child("template", "spec", "restartPolicy"), spec.Template.Spec.RestartPolicy, []string{string(api.RestartPolicyAlways)})) } allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.MinReadySeconds), fldPath.Child("minReadySeconds"))...) + allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.TemplateGeneration), fldPath.Child("templateGeneration"))...) allErrs = append(allErrs, ValidateDaemonSetUpdateStrategy(&spec.UpdateStrategy, fldPath.Child("updateStrategy"))...) return allErrs diff --git a/pkg/controller/daemon/daemoncontroller.go b/pkg/controller/daemon/daemoncontroller.go index c1b6950b300..aaf3f71d29c 100644 --- a/pkg/controller/daemon/daemoncontroller.go +++ b/pkg/controller/daemon/daemoncontroller.go @@ -576,7 +576,7 @@ func (dsc *DaemonSetsController) syncNodes(ds *extensions.DaemonSet, podsToDelet glog.V(4).Infof("Nodes needing daemon pods for daemon set %s: %+v, creating %d", ds.Name, nodesNeedingDaemonPods, createDiff) createWait := sync.WaitGroup{} createWait.Add(createDiff) - template := util.GetPodTemplateWithGeneration(ds.Spec.Template, ds.TemplateGeneration) + template := util.GetPodTemplateWithGeneration(ds.Spec.Template, ds.Spec.TemplateGeneration) for i := 0; i < createDiff; i++ { go func(ix int) { defer createWait.Done() @@ -695,7 +695,7 @@ func (dsc *DaemonSetsController) updateDaemonSetStatus(ds *extensions.DaemonSet) numberAvailable++ } } - if util.IsPodUpdated(ds.TemplateGeneration, pod) { + if util.IsPodUpdated(ds.Spec.TemplateGeneration, pod) { updatedNumberScheduled++ } } diff --git a/pkg/controller/daemon/daemoncontroller_test.go b/pkg/controller/daemon/daemoncontroller_test.go index 8ec2f017e72..e9e34bf3fd6 100644 --- a/pkg/controller/daemon/daemoncontroller_test.go +++ b/pkg/controller/daemon/daemoncontroller_test.go @@ -1022,7 +1022,7 @@ func TestDaemonSetUpdatesPods(t *testing.T) { ds.Spec.UpdateStrategy.Type = extensions.RollingUpdateDaemonSetStrategyType intStr := intstr.FromInt(maxUnavailable) ds.Spec.UpdateStrategy.RollingUpdate = &extensions.RollingUpdateDaemonSet{MaxUnavailable: &intStr} - ds.TemplateGeneration++ + ds.Spec.TemplateGeneration++ manager.dsStore.Update(ds) clearExpectations(t, manager, ds, podControl) @@ -1061,7 +1061,7 @@ func TestDaemonSetUpdatesWhenNewPosIsNotReady(t *testing.T) { ds.Spec.UpdateStrategy.Type = extensions.RollingUpdateDaemonSetStrategyType intStr := intstr.FromInt(maxUnavailable) ds.Spec.UpdateStrategy.RollingUpdate = &extensions.RollingUpdateDaemonSet{MaxUnavailable: &intStr} - ds.TemplateGeneration++ + ds.Spec.TemplateGeneration++ manager.dsStore.Update(ds) // new pods are not ready numUnavailable == maxUnavailable @@ -1087,7 +1087,7 @@ func TestDaemonSetUpdatesAllOldPodsNotReady(t *testing.T) { ds.Spec.UpdateStrategy.Type = extensions.RollingUpdateDaemonSetStrategyType intStr := intstr.FromInt(maxUnavailable) ds.Spec.UpdateStrategy.RollingUpdate = &extensions.RollingUpdateDaemonSet{MaxUnavailable: &intStr} - ds.TemplateGeneration++ + ds.Spec.TemplateGeneration++ manager.dsStore.Update(ds) // all old pods are unavailable so should be removed diff --git a/pkg/controller/daemon/update.go b/pkg/controller/daemon/update.go index 01f5491ee00..f13afba8330 100644 --- a/pkg/controller/daemon/update.go +++ b/pkg/controller/daemon/update.go @@ -80,7 +80,7 @@ func (dsc *DaemonSetsController) getAllDaemonSetPods(ds *extensions.DaemonSet) ( return newPods, oldPods, fmt.Errorf("Couldn't get list of pods for daemon set %#v: %v", ds, err) } for _, pod := range daemonPods { - if util.IsPodUpdated(ds.TemplateGeneration, pod) { + if util.IsPodUpdated(ds.Spec.TemplateGeneration, pod) { newPods = append(newPods, pod) } else { oldPods = append(oldPods, pod) diff --git a/pkg/registry/extensions/daemonset/strategy.go b/pkg/registry/extensions/daemonset/strategy.go index 4245987dc52..6d02f60e725 100644 --- a/pkg/registry/extensions/daemonset/strategy.go +++ b/pkg/registry/extensions/daemonset/strategy.go @@ -53,7 +53,9 @@ func (daemonSetStrategy) PrepareForCreate(ctx genericapirequest.Context, obj run daemonSet.Status = extensions.DaemonSetStatus{} daemonSet.Generation = 1 - daemonSet.TemplateGeneration = 1 + if daemonSet.Spec.TemplateGeneration < 1 { + daemonSet.Spec.TemplateGeneration = 1 + } } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -65,7 +67,7 @@ func (daemonSetStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, ol newDaemonSet.Status = oldDaemonSet.Status // update is not allowed to set TemplateGeneration - newDaemonSet.TemplateGeneration = oldDaemonSet.TemplateGeneration + newDaemonSet.Spec.TemplateGeneration = oldDaemonSet.Spec.TemplateGeneration // Any changes to the spec increment the generation number, any changes to the // status should reflect the generation number of the corresponding object. We push @@ -79,7 +81,7 @@ func (daemonSetStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, ol // TODO: Any changes to a part of the object that represents desired state (labels, // annotations etc) should also increment the generation. if !reflect.DeepEqual(oldDaemonSet.Spec.Template, newDaemonSet.Spec.Template) { - newDaemonSet.TemplateGeneration = oldDaemonSet.TemplateGeneration + 1 + newDaemonSet.Spec.TemplateGeneration = oldDaemonSet.Spec.TemplateGeneration + 1 newDaemonSet.Generation = oldDaemonSet.Generation + 1 return }