@@ -19,34 +19,84 @@ limitations under the License.
19
19
package app
20
20
21
21
import (
22
+ "k8s.io/component-base/featuregate"
23
+ "k8s.io/csi-translation-lib/plugins"
24
+ "k8s.io/klog"
25
+ "k8s.io/kubernetes/pkg/features"
22
26
"k8s.io/kubernetes/pkg/volume"
23
27
"k8s.io/kubernetes/pkg/volume/awsebs"
24
28
"k8s.io/kubernetes/pkg/volume/azure_dd"
25
29
"k8s.io/kubernetes/pkg/volume/azure_file"
26
30
"k8s.io/kubernetes/pkg/volume/cinder"
31
+ "k8s.io/kubernetes/pkg/volume/csimigration"
27
32
"k8s.io/kubernetes/pkg/volume/gcepd"
28
33
"k8s.io/kubernetes/pkg/volume/vsphere_volume"
29
34
)
30
35
31
- func appendAttachableLegacyProviderVolumes (allPlugins []volume.VolumePlugin ) []volume.VolumePlugin {
32
- allPlugins = append (allPlugins , awsebs .ProbeVolumePlugins ()... )
33
- allPlugins = append (allPlugins , azure_dd .ProbeVolumePlugins ()... )
34
- allPlugins = append (allPlugins , cinder .ProbeVolumePlugins ()... )
35
- allPlugins = append (allPlugins , gcepd .ProbeVolumePlugins ()... )
36
+ type probeFn func () []volume.VolumePlugin
37
+
38
+ func appendPluginBasedOnMigrationFeatureFlags (plugins []volume.VolumePlugin , inTreePluginName string , featureGate featuregate.FeatureGate , pluginMigration , pluginMigrationComplete featuregate.Feature , fn probeFn ) ([]volume.VolumePlugin , error ) {
39
+ // Skip appending the in-tree plugin to the list of plugins to be probed/initialized
40
+ // if the CSIMigration feature flag and plugin specific feature flag indicating
41
+ // CSI migration is complete
42
+ err := csimigration .CheckMigrationFeatureFlags (featureGate , pluginMigration , pluginMigrationComplete )
43
+ if err != nil {
44
+ klog .Warningf ("Unexpected CSI Migration Feature Flags combination detected: %v. CSI Migration may not take effect" , err )
45
+ // TODO: fail and return here once alpha only tests can set the feature flags for a plugin correctly
46
+ }
47
+ if featureGate .Enabled (features .CSIMigration ) && featureGate .Enabled (pluginMigration ) && featureGate .Enabled (pluginMigrationComplete ) {
48
+ klog .Infof ("Skip registration of plugin %s since feature flag %v is enabled" , inTreePluginName , pluginMigrationComplete )
49
+ return plugins , nil
50
+ }
51
+ plugins = append (plugins , fn ()... )
52
+ return plugins , nil
53
+ }
54
+
55
+ type pluginInfo struct {
56
+ pluginMigrationFeature featuregate.Feature
57
+ pluginMigrationCompleteFeature featuregate.Feature
58
+ pluginProbeFunction probeFn
59
+ }
60
+
61
+ func appendAttachableLegacyProviderVolumes (allPlugins []volume.VolumePlugin , featureGate featuregate.FeatureGate ) ([]volume.VolumePlugin , error ) {
62
+ pluginMigrationStatus := make (map [string ]pluginInfo )
63
+ pluginMigrationStatus [plugins .AWSEBSInTreePluginName ] = pluginInfo {pluginMigrationFeature : features .CSIMigrationAWS , pluginMigrationCompleteFeature : features .CSIMigrationAWSComplete , pluginProbeFunction : awsebs .ProbeVolumePlugins }
64
+ pluginMigrationStatus [plugins .GCEPDInTreePluginName ] = pluginInfo {pluginMigrationFeature : features .CSIMigrationGCE , pluginMigrationCompleteFeature : features .CSIMigrationGCEComplete , pluginProbeFunction : gcepd .ProbeVolumePlugins }
65
+ pluginMigrationStatus [plugins .CinderInTreePluginName ] = pluginInfo {pluginMigrationFeature : features .CSIMigrationOpenStack , pluginMigrationCompleteFeature : features .CSIMigrationOpenStackComplete , pluginProbeFunction : cinder .ProbeVolumePlugins }
66
+ pluginMigrationStatus [plugins .AzureDiskInTreePluginName ] = pluginInfo {pluginMigrationFeature : features .CSIMigrationAzureDisk , pluginMigrationCompleteFeature : features .CSIMigrationAzureDiskComplete , pluginProbeFunction : azure_dd .ProbeVolumePlugins }
67
+
68
+ var err error
69
+ for pluginName , pluginInfo := range pluginMigrationStatus {
70
+ allPlugins , err = appendPluginBasedOnMigrationFeatureFlags (allPlugins , pluginName , featureGate , pluginInfo .pluginMigrationFeature , pluginInfo .pluginMigrationCompleteFeature , pluginInfo .pluginProbeFunction )
71
+ if err != nil {
72
+ return allPlugins , err
73
+ }
74
+ }
75
+
36
76
allPlugins = append (allPlugins , vsphere_volume .ProbeVolumePlugins ()... )
37
- return allPlugins
77
+ return allPlugins , nil
38
78
}
39
79
40
- func appendExpandableLegacyProviderVolumes (allPlugins []volume.VolumePlugin ) []volume.VolumePlugin {
41
- return appendLegacyProviderVolumes (allPlugins )
80
+ func appendExpandableLegacyProviderVolumes (allPlugins []volume.VolumePlugin , featureGate featuregate. FeatureGate ) ( []volume.VolumePlugin , error ) {
81
+ return appendLegacyProviderVolumes (allPlugins , featureGate )
42
82
}
43
83
44
- func appendLegacyProviderVolumes (allPlugins []volume.VolumePlugin ) []volume.VolumePlugin {
45
- allPlugins = append (allPlugins , awsebs .ProbeVolumePlugins ()... )
46
- allPlugins = append (allPlugins , azure_dd .ProbeVolumePlugins ()... )
47
- allPlugins = append (allPlugins , azure_file .ProbeVolumePlugins ()... )
48
- allPlugins = append (allPlugins , cinder .ProbeVolumePlugins ()... )
49
- allPlugins = append (allPlugins , gcepd .ProbeVolumePlugins ()... )
84
+ func appendLegacyProviderVolumes (allPlugins []volume.VolumePlugin , featureGate featuregate.FeatureGate ) ([]volume.VolumePlugin , error ) {
85
+ pluginMigrationStatus := make (map [string ]pluginInfo )
86
+ pluginMigrationStatus [plugins .AWSEBSInTreePluginName ] = pluginInfo {pluginMigrationFeature : features .CSIMigrationAWS , pluginMigrationCompleteFeature : features .CSIMigrationAWSComplete , pluginProbeFunction : awsebs .ProbeVolumePlugins }
87
+ pluginMigrationStatus [plugins .GCEPDInTreePluginName ] = pluginInfo {pluginMigrationFeature : features .CSIMigrationGCE , pluginMigrationCompleteFeature : features .CSIMigrationGCEComplete , pluginProbeFunction : gcepd .ProbeVolumePlugins }
88
+ pluginMigrationStatus [plugins .CinderInTreePluginName ] = pluginInfo {pluginMigrationFeature : features .CSIMigrationOpenStack , pluginMigrationCompleteFeature : features .CSIMigrationOpenStackComplete , pluginProbeFunction : cinder .ProbeVolumePlugins }
89
+ pluginMigrationStatus [plugins .AzureDiskInTreePluginName ] = pluginInfo {pluginMigrationFeature : features .CSIMigrationAzureDisk , pluginMigrationCompleteFeature : features .CSIMigrationAzureDiskComplete , pluginProbeFunction : azure_dd .ProbeVolumePlugins }
90
+ pluginMigrationStatus [plugins .AzureFileInTreePluginName ] = pluginInfo {pluginMigrationFeature : features .CSIMigrationAzureFile , pluginMigrationCompleteFeature : features .CSIMigrationAzureFileComplete , pluginProbeFunction : azure_file .ProbeVolumePlugins }
91
+
92
+ var err error
93
+ for pluginName , pluginInfo := range pluginMigrationStatus {
94
+ allPlugins , err = appendPluginBasedOnMigrationFeatureFlags (allPlugins , pluginName , featureGate , pluginInfo .pluginMigrationFeature , pluginInfo .pluginMigrationCompleteFeature , pluginInfo .pluginProbeFunction )
95
+ if err != nil {
96
+ return allPlugins , err
97
+ }
98
+ }
99
+
50
100
allPlugins = append (allPlugins , vsphere_volume .ProbeVolumePlugins ()... )
51
- return allPlugins
101
+ return allPlugins , nil
52
102
}
0 commit comments