diff --git a/cmd/kube-controller-manager/app/plugins.go b/cmd/kube-controller-manager/app/plugins.go index 0d0dc539367a9..f7788c834a27d 100644 --- a/cmd/kube-controller-manager/app/plugins.go +++ b/cmd/kube-controller-manager/app/plugins.go @@ -34,6 +34,7 @@ import ( "k8s.io/kubernetes/pkg/cloudprovider/providers/gce" "k8s.io/kubernetes/pkg/cloudprovider/providers/openstack" "k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere" + utilconfig "k8s.io/kubernetes/pkg/util/config" "k8s.io/kubernetes/pkg/util/io" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/aws_ebs" @@ -125,6 +126,8 @@ func ProbeControllerVolumePlugins(cloud cloudprovider.Interface, config componen // TODO: remove in Kubernetes 1.5 func NewAlphaVolumeProvisioner(cloud cloudprovider.Interface, config componentconfig.VolumeConfiguration) (volume.ProvisionableVolumePlugin, error) { switch { + case !utilconfig.DefaultFeatureGate.DynamicVolumeProvisioning(): + return nil, nil case cloud == nil && config.EnableHostPathProvisioning: return getProvisionablePluginFromVolumePlugins(host_path.ProbeVolumePlugins( volume.VolumeConfig{ diff --git a/pkg/util/config/feature_gate.go b/pkg/util/config/feature_gate.go index 70f68d35818c2..a07d1067656f5 100644 --- a/pkg/util/config/feature_gate.go +++ b/pkg/util/config/feature_gate.go @@ -38,18 +38,20 @@ const ( // specification of gates. Examples: // AllAlpha=false,NewFeature=true will result in newFeature=true // AllAlpha=true,NewFeature=false will result in newFeature=false - allAlphaGate = "AllAlpha" - externalTrafficLocalOnly = "AllowExtTrafficLocalEndpoints" - dynamicKubeletConfig = "DynamicKubeletConfig" + allAlphaGate = "AllAlpha" + externalTrafficLocalOnly = "AllowExtTrafficLocalEndpoints" + dynamicKubeletConfig = "DynamicKubeletConfig" + dynamicVolumeProvisioning = "DynamicVolumeProvisioning" ) var ( // Default values for recorded features. Every new feature gate should be // represented here. knownFeatures = map[string]featureSpec{ - allAlphaGate: {false, alpha}, - externalTrafficLocalOnly: {false, alpha}, - dynamicKubeletConfig: {false, alpha}, + allAlphaGate: {false, alpha}, + externalTrafficLocalOnly: {false, alpha}, + dynamicKubeletConfig: {false, alpha}, + dynamicVolumeProvisioning: {true, alpha}, } // Special handling for a few gates. @@ -93,6 +95,10 @@ type FeatureGate interface { // alpha: v1.4 ExternalTrafficLocalOnly() bool + // owner: @saad-ali + // alpha: v1.3 + DynamicVolumeProvisioning() bool + // TODO: Define accessors for each non-API alpha feature. DynamicKubeletConfig() bool } @@ -173,6 +179,11 @@ func (f *featureGate) DynamicKubeletConfig() bool { return f.lookup(dynamicKubeletConfig) } +// DynamicVolumeProvisioning returns value for dynamicVolumeProvisioning +func (f *featureGate) DynamicVolumeProvisioning() bool { + return f.lookup(dynamicVolumeProvisioning) +} + func (f *featureGate) lookup(key string) bool { defaultValue := f.known[key].enabled if f.enabled != nil {