From 876109a53c1e2945d8a05b78958eedea68c28480 Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Mon, 4 Sep 2017 10:40:54 +0200 Subject: [PATCH] Clear alpha MountPropagation fields. According to api_changes.md, alpha fields must be cleared when corresponding feature is disabled. --- pkg/api/pod/util.go | 16 ++++++++++++++++ pkg/registry/settings/podpreset/BUILD | 1 + pkg/registry/settings/podpreset/strategy.go | 6 ++++++ 3 files changed, 23 insertions(+) diff --git a/pkg/api/pod/util.go b/pkg/api/pod/util.go index fbc785ab3f5e..7c8afdf46a88 100644 --- a/pkg/api/pod/util.go +++ b/pkg/api/pod/util.go @@ -243,4 +243,20 @@ func DropDisabledAlphaFields(podSpec *api.PodSpec) { } } } + for i := range podSpec.Containers { + DropDisabledVolumeMountsAlphaFields(podSpec.Containers[i].VolumeMounts) + } + for i := range podSpec.InitContainers { + DropDisabledVolumeMountsAlphaFields(podSpec.InitContainers[i].VolumeMounts) + } +} + +// DropDisabledVolumeMountsAlphaFields removes disabled fields from []VolumeMount. +// This should be called from PrepareForCreate/PrepareForUpdate for all resources containing a VolumeMount +func DropDisabledVolumeMountsAlphaFields(volumeMounts []api.VolumeMount) { + if !utilfeature.DefaultFeatureGate.Enabled(features.MountPropagation) { + for i := range volumeMounts { + volumeMounts[i].MountPropagation = nil + } + } } diff --git a/pkg/registry/settings/podpreset/BUILD b/pkg/registry/settings/podpreset/BUILD index 648ef350e861..3a5eea5b54da 100644 --- a/pkg/registry/settings/podpreset/BUILD +++ b/pkg/registry/settings/podpreset/BUILD @@ -14,6 +14,7 @@ go_library( ], deps = [ "//pkg/api:go_default_library", + "//pkg/api/pod:go_default_library", "//pkg/apis/settings:go_default_library", "//pkg/apis/settings/validation:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion:go_default_library", diff --git a/pkg/registry/settings/podpreset/strategy.go b/pkg/registry/settings/podpreset/strategy.go index 2d53ed16e68f..65db5988adf4 100644 --- a/pkg/registry/settings/podpreset/strategy.go +++ b/pkg/registry/settings/podpreset/strategy.go @@ -22,6 +22,7 @@ import ( genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/storage/names" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/pod" "k8s.io/kubernetes/pkg/apis/settings" "k8s.io/kubernetes/pkg/apis/settings/validation" ) @@ -44,6 +45,8 @@ func (podPresetStrategy) NamespaceScoped() bool { func (podPresetStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { pip := obj.(*settings.PodPreset) pip.Generation = 1 + + pod.DropDisabledVolumeMountsAlphaFields(pip.Spec.VolumeMounts) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -51,6 +54,9 @@ func (podPresetStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, ol newPodPreset := obj.(*settings.PodPreset) oldPodPreset := old.(*settings.PodPreset) + pod.DropDisabledVolumeMountsAlphaFields(oldPodPreset.Spec.VolumeMounts) + pod.DropDisabledVolumeMountsAlphaFields(newPodPreset.Spec.VolumeMounts) + // Update is not allowed newPodPreset.Spec = oldPodPreset.Spec }