2019-09-27 21:51:53 +00:00
// +build !providerless
/ *
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 (
2021-03-18 22:40:29 +00:00
// Credential providers
_ "k8s.io/kubernetes/pkg/credentialprovider/aws"
_ "k8s.io/kubernetes/pkg/credentialprovider/azure"
_ "k8s.io/kubernetes/pkg/credentialprovider/gcp"
2019-12-12 01:27:03 +00:00
"k8s.io/component-base/featuregate"
"k8s.io/csi-translation-lib/plugins"
2020-08-10 17:43:49 +00:00
"k8s.io/klog/v2"
2019-12-12 01:27:03 +00:00
"k8s.io/kubernetes/pkg/features"
2019-09-27 21:51:53 +00:00
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume/awsebs"
"k8s.io/kubernetes/pkg/volume/azure_file"
2020-12-01 01:06:26 +00:00
"k8s.io/kubernetes/pkg/volume/azuredd"
2019-09-27 21:51:53 +00:00
"k8s.io/kubernetes/pkg/volume/cinder"
2019-12-12 01:27:03 +00:00
"k8s.io/kubernetes/pkg/volume/csimigration"
2019-09-27 21:51:53 +00:00
"k8s.io/kubernetes/pkg/volume/gcepd"
"k8s.io/kubernetes/pkg/volume/vsphere_volume"
)
2019-12-12 01:27:03 +00:00
type probeFn func ( ) [ ] volume . VolumePlugin
2021-03-18 22:40:29 +00:00
func appendPluginBasedOnFeatureFlags ( plugins [ ] volume . VolumePlugin , inTreePluginName string ,
featureGate featuregate . FeatureGate , pluginInfo pluginInfo ) ( [ ] volume . VolumePlugin , error ) {
2021-07-02 08:43:15 +00:00
_ , err := csimigration . CheckMigrationFeatureFlags ( featureGate , pluginInfo . pluginMigrationFeature , pluginInfo . pluginUnregisterFeature )
2019-12-12 01:27:03 +00:00
if err != nil {
2021-03-18 22:40:29 +00:00
klog . InfoS ( "Unexpected CSI Migration Feature Flags combination detected, CSI Migration may not take effect" , "err" , err )
2019-12-12 01:27:03 +00:00
// TODO: fail and return here once alpha only tests can set the feature flags for a plugin correctly
}
2021-07-02 08:43:15 +00:00
// Skip appending the in-tree plugin to the list of plugins to be probed/initialized
// if the plugin unregister feature flag is set
2021-03-18 22:40:29 +00:00
if featureGate . Enabled ( pluginInfo . pluginUnregisterFeature ) {
klog . InfoS ( "Skipped registration of plugin since feature flag is enabled" , "pluginName" , inTreePluginName , "featureFlag" , pluginInfo . pluginUnregisterFeature )
2019-12-12 01:27:03 +00:00
return plugins , nil
}
2021-03-18 22:40:29 +00:00
plugins = append ( plugins , pluginInfo . pluginProbeFunction ( ) ... )
2019-12-12 01:27:03 +00:00
return plugins , nil
}
type pluginInfo struct {
2021-07-02 08:43:15 +00:00
pluginMigrationFeature featuregate . Feature
pluginUnregisterFeature featuregate . Feature
pluginProbeFunction probeFn
2019-12-12 01:27:03 +00:00
}
func appendLegacyProviderVolumes ( allPlugins [ ] volume . VolumePlugin , featureGate featuregate . FeatureGate ) ( [ ] volume . VolumePlugin , error ) {
pluginMigrationStatus := make ( map [ string ] pluginInfo )
2021-03-18 22:40:29 +00:00
pluginMigrationStatus [ plugins . AWSEBSInTreePluginName ] = pluginInfo { pluginMigrationFeature : features . CSIMigrationAWS , pluginUnregisterFeature : features . InTreePluginAWSUnregister , pluginProbeFunction : awsebs . ProbeVolumePlugins }
pluginMigrationStatus [ plugins . GCEPDInTreePluginName ] = pluginInfo { pluginMigrationFeature : features . CSIMigrationGCE , pluginUnregisterFeature : features . InTreePluginGCEUnregister , pluginProbeFunction : gcepd . ProbeVolumePlugins }
pluginMigrationStatus [ plugins . CinderInTreePluginName ] = pluginInfo { pluginMigrationFeature : features . CSIMigrationOpenStack , pluginUnregisterFeature : features . InTreePluginOpenStackUnregister , pluginProbeFunction : cinder . ProbeVolumePlugins }
pluginMigrationStatus [ plugins . AzureDiskInTreePluginName ] = pluginInfo { pluginMigrationFeature : features . CSIMigrationAzureDisk , pluginUnregisterFeature : features . InTreePluginAzureDiskUnregister , pluginProbeFunction : azuredd . ProbeVolumePlugins }
pluginMigrationStatus [ plugins . AzureFileInTreePluginName ] = pluginInfo { pluginMigrationFeature : features . CSIMigrationAzureFile , pluginUnregisterFeature : features . InTreePluginAzureFileUnregister , pluginProbeFunction : azure_file . ProbeVolumePlugins }
2021-07-02 08:43:15 +00:00
pluginMigrationStatus [ plugins . VSphereInTreePluginName ] = pluginInfo { pluginMigrationFeature : features . CSIMigrationvSphere , pluginUnregisterFeature : features . InTreePluginvSphereUnregister , pluginProbeFunction : vsphere_volume . ProbeVolumePlugins }
2019-12-12 01:27:03 +00:00
var err error
for pluginName , pluginInfo := range pluginMigrationStatus {
2021-03-18 22:40:29 +00:00
allPlugins , err = appendPluginBasedOnFeatureFlags ( allPlugins , pluginName , featureGate , pluginInfo )
2019-12-12 01:27:03 +00:00
if err != nil {
return allPlugins , err
}
}
return allPlugins , nil
2019-09-27 21:51:53 +00:00
}