address comments during review
Signed-off-by: Davanum Srinivas <davanum@gmail.com>
This commit is contained in:
		| @@ -38,6 +38,7 @@ import ( | ||||
| 	"k8s.io/kubernetes/pkg/volume/nfs" | ||||
| 	volumeutil "k8s.io/kubernetes/pkg/volume/util" | ||||
|  | ||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||
| 	persistentvolumeconfig "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/config" | ||||
| 	"k8s.io/utils/exec" | ||||
| ) | ||||
| @@ -47,7 +48,12 @@ import ( | ||||
| // The list of plugins is manually compiled. This code and the plugin | ||||
| // initialization code for kubelet really, really need a through refactor. | ||||
| func ProbeAttachableVolumePlugins(logger klog.Logger) ([]volume.VolumePlugin, error) { | ||||
| 	var err error | ||||
| 	allPlugins := []volume.VolumePlugin{} | ||||
| 	allPlugins, err = appendAttachableLegacyProviderVolumes(logger, allPlugins, utilfeature.DefaultFeatureGate) | ||||
| 	if err != nil { | ||||
| 		return allPlugins, err | ||||
| 	} | ||||
| 	allPlugins = append(allPlugins, fc.ProbeVolumePlugins()...) | ||||
| 	allPlugins = append(allPlugins, iscsi.ProbeVolumePlugins()...) | ||||
| 	allPlugins = append(allPlugins, csi.ProbeVolumePlugins()...) | ||||
| @@ -63,7 +69,12 @@ func GetDynamicPluginProber(config persistentvolumeconfig.VolumeConfiguration) v | ||||
|  | ||||
| // ProbeExpandableVolumePlugins returns volume plugins which are expandable | ||||
| func ProbeExpandableVolumePlugins(logger klog.Logger, config persistentvolumeconfig.VolumeConfiguration) ([]volume.VolumePlugin, error) { | ||||
| 	var err error | ||||
| 	allPlugins := []volume.VolumePlugin{} | ||||
| 	allPlugins, err = appendExpandableLegacyProviderVolumes(logger, allPlugins, utilfeature.DefaultFeatureGate) | ||||
| 	if err != nil { | ||||
| 		return allPlugins, err | ||||
| 	} | ||||
| 	allPlugins = append(allPlugins, fc.ProbeVolumePlugins()...) | ||||
| 	return allPlugins, nil | ||||
| } | ||||
| @@ -105,6 +116,13 @@ func ProbeControllerVolumePlugins(logger klog.Logger, config persistentvolumecon | ||||
| 		klog.FlushAndExit(klog.ExitFlushTimeout, 1) | ||||
| 	} | ||||
| 	allPlugins = append(allPlugins, nfs.ProbeVolumePlugins(nfsConfig)...) | ||||
|  | ||||
| 	var err error | ||||
| 	allPlugins, err = appendExpandableLegacyProviderVolumes(logger, allPlugins, utilfeature.DefaultFeatureGate) | ||||
| 	if err != nil { | ||||
| 		return allPlugins, err | ||||
| 	} | ||||
|  | ||||
| 	allPlugins = append(allPlugins, local.ProbeVolumePlugins()...) | ||||
| 	allPlugins = append(allPlugins, csi.ProbeVolumePlugins()...) | ||||
|  | ||||
|   | ||||
							
								
								
									
										77
									
								
								cmd/kube-controller-manager/app/plugins_providers.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								cmd/kube-controller-manager/app/plugins_providers.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| /* | ||||
| Copyright 2019 The Kubernetes Authors. | ||||
|  | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
|  | ||||
|     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
|  | ||||
| package app | ||||
|  | ||||
| import ( | ||||
| 	"k8s.io/component-base/featuregate" | ||||
| 	"k8s.io/csi-translation-lib/plugins" | ||||
| 	"k8s.io/klog/v2" | ||||
| 	"k8s.io/kubernetes/pkg/features" | ||||
| 	"k8s.io/kubernetes/pkg/volume" | ||||
| 	"k8s.io/kubernetes/pkg/volume/csimigration" | ||||
| 	"k8s.io/kubernetes/pkg/volume/portworx" | ||||
| 	"k8s.io/kubernetes/pkg/volume/rbd" | ||||
| ) | ||||
|  | ||||
| type probeFn func() []volume.VolumePlugin | ||||
|  | ||||
| func appendPluginBasedOnFeatureFlags(logger klog.Logger, plugins []volume.VolumePlugin, inTreePluginName string, featureGate featuregate.FeatureGate, pluginInfo pluginInfo) ([]volume.VolumePlugin, error) { | ||||
|  | ||||
| 	_, err := csimigration.CheckMigrationFeatureFlags(featureGate, pluginInfo.pluginMigrationFeature, pluginInfo.pluginUnregisterFeature) | ||||
| 	if err != nil { | ||||
| 		logger.Error(err, "Unexpected CSI Migration Feature Flags combination detected. CSI Migration may not take effect") | ||||
| 		klog.FlushAndExit(klog.ExitFlushTimeout, 1) | ||||
| 		// TODO: fail and return here once alpha only tests can set the feature flags for a plugin correctly | ||||
| 	} | ||||
|  | ||||
| 	// Skip appending the in-tree plugin to the list of plugins to be probed/initialized | ||||
| 	// if the plugin unregister feature flag is set | ||||
| 	if featureGate.Enabled(pluginInfo.pluginUnregisterFeature) { | ||||
| 		logger.Info("Skip registration of plugin since feature flag is enabled", "plugin", inTreePluginName, "feature", pluginInfo.pluginUnregisterFeature) | ||||
| 		return plugins, nil | ||||
| 	} | ||||
| 	plugins = append(plugins, pluginInfo.pluginProbeFunction()...) | ||||
| 	return plugins, nil | ||||
| } | ||||
|  | ||||
| type pluginInfo struct { | ||||
| 	pluginMigrationFeature  featuregate.Feature | ||||
| 	pluginUnregisterFeature featuregate.Feature | ||||
| 	pluginProbeFunction     probeFn | ||||
| } | ||||
|  | ||||
| func appendAttachableLegacyProviderVolumes(logger klog.Logger, allPlugins []volume.VolumePlugin, featureGate featuregate.FeatureGate) ([]volume.VolumePlugin, error) { | ||||
| 	pluginMigrationStatus := make(map[string]pluginInfo) | ||||
| 	pluginMigrationStatus[plugins.PortworxVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationPortworx, pluginUnregisterFeature: features.InTreePluginPortworxUnregister, pluginProbeFunction: portworx.ProbeVolumePlugins} | ||||
| 	pluginMigrationStatus[plugins.RBDVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationRBD, pluginUnregisterFeature: features.InTreePluginRBDUnregister, pluginProbeFunction: rbd.ProbeVolumePlugins} | ||||
| 	var err error | ||||
| 	for pluginName, pluginInfo := range pluginMigrationStatus { | ||||
| 		allPlugins, err = appendPluginBasedOnFeatureFlags(logger, allPlugins, pluginName, featureGate, pluginInfo) | ||||
| 		if err != nil { | ||||
| 			return allPlugins, err | ||||
| 		} | ||||
| 	} | ||||
| 	return allPlugins, nil | ||||
| } | ||||
|  | ||||
| func appendExpandableLegacyProviderVolumes(logger klog.Logger, allPlugins []volume.VolumePlugin, featureGate featuregate.FeatureGate) ([]volume.VolumePlugin, error) { | ||||
| 	return appendLegacyProviderVolumes(logger, allPlugins, featureGate) | ||||
| } | ||||
|  | ||||
| func appendLegacyProviderVolumes(logger klog.Logger, allPlugins []volume.VolumePlugin, featureGate featuregate.FeatureGate) ([]volume.VolumePlugin, error) { | ||||
| 	return appendAttachableLegacyProviderVolumes(logger, allPlugins, featureGate) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Davanum Srinivas
					Davanum Srinivas