...
1
2
3
4
19
20 package app
21
22 import (
23 "k8s.io/component-base/featuregate"
24 "k8s.io/csi-translation-lib/plugins"
25 "k8s.io/klog/v2"
26 "k8s.io/kubernetes/pkg/features"
27 "k8s.io/kubernetes/pkg/volume"
28 "k8s.io/kubernetes/pkg/volume/csimigration"
29 "k8s.io/kubernetes/pkg/volume/portworx"
30 "k8s.io/kubernetes/pkg/volume/rbd"
31 )
32
33 type probeFn func() []volume.VolumePlugin
34
35 func appendPluginBasedOnFeatureFlags(logger klog.Logger, plugins []volume.VolumePlugin, inTreePluginName string, featureGate featuregate.FeatureGate, pluginInfo pluginInfo) ([]volume.VolumePlugin, error) {
36
37 _, err := csimigration.CheckMigrationFeatureFlags(featureGate, pluginInfo.pluginMigrationFeature, pluginInfo.pluginUnregisterFeature)
38 if err != nil {
39 logger.Error(err, "Unexpected CSI Migration Feature Flags combination detected. CSI Migration may not take effect")
40 klog.FlushAndExit(klog.ExitFlushTimeout, 1)
41
42 }
43
44
45
46 if featureGate.Enabled(pluginInfo.pluginUnregisterFeature) {
47 logger.Info("Skip registration of plugin since feature flag is enabled", "plugin", inTreePluginName, "feature", pluginInfo.pluginUnregisterFeature)
48 return plugins, nil
49 }
50 plugins = append(plugins, pluginInfo.pluginProbeFunction()...)
51 return plugins, nil
52 }
53
54 type pluginInfo struct {
55 pluginMigrationFeature featuregate.Feature
56 pluginUnregisterFeature featuregate.Feature
57 pluginProbeFunction probeFn
58 }
59
60 func appendAttachableLegacyProviderVolumes(logger klog.Logger, allPlugins []volume.VolumePlugin, featureGate featuregate.FeatureGate) ([]volume.VolumePlugin, error) {
61 pluginMigrationStatus := make(map[string]pluginInfo)
62 pluginMigrationStatus[plugins.PortworxVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationPortworx, pluginUnregisterFeature: features.InTreePluginPortworxUnregister, pluginProbeFunction: portworx.ProbeVolumePlugins}
63 pluginMigrationStatus[plugins.RBDVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationRBD, pluginUnregisterFeature: features.InTreePluginRBDUnregister, pluginProbeFunction: rbd.ProbeVolumePlugins}
64 var err error
65 for pluginName, pluginInfo := range pluginMigrationStatus {
66 allPlugins, err = appendPluginBasedOnFeatureFlags(logger, allPlugins, pluginName, featureGate, pluginInfo)
67 if err != nil {
68 return allPlugins, err
69 }
70 }
71 return allPlugins, nil
72 }
73
74 func appendExpandableLegacyProviderVolumes(logger klog.Logger, allPlugins []volume.VolumePlugin, featureGate featuregate.FeatureGate) ([]volume.VolumePlugin, error) {
75 return appendLegacyProviderVolumes(logger, allPlugins, featureGate)
76 }
77
78 func appendLegacyProviderVolumes(logger klog.Logger, allPlugins []volume.VolumePlugin, featureGate featuregate.FeatureGate) ([]volume.VolumePlugin, error) {
79 return appendAttachableLegacyProviderVolumes(logger, allPlugins, featureGate)
80 }
81
View as plain text