Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add common functionality required for all in-tree to CSI Migration shim code pieces #73043

Merged
merged 2 commits into from Jan 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions pkg/controller/volume/attachdetach/testing/testvolumespec.go
Expand Up @@ -253,6 +253,10 @@ func (plugin *TestPlugin) CanSupport(spec *volume.Spec) bool {
return true
}

func (plugin *TestPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *TestPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/controller/volume/persistentvolume/framework_test.go
Expand Up @@ -1258,6 +1258,10 @@ func (plugin *mockVolumePlugin) CanSupport(spec *vol.Spec) bool {
return true
}

func (plugin *mockVolumePlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *mockVolumePlugin) RequiresRemount() bool {
return false
}
Expand Down
21 changes: 21 additions & 0 deletions pkg/features/kube_features.go
Expand Up @@ -390,6 +390,24 @@ const (
//
// Enables the kubelet's pod resources grpc endpoint
KubeletPodResources utilfeature.Feature = "KubeletPodResources"

// owner: @davidz627
// alpha: v1.14
//
// Enables the in-tree storage to CSI Plugin migration feature.
CSIMigration utilfeature.Feature = "CSIMigration"

// owner: @davidz627
// alpha: v1.14
//
// Enables the GCE PD in-tree driver to GCE CSI Driver migration feature.
CSIMigrationGCE utilfeature.Feature = "CSIMigrationGCE"

// owner: @leakingtapan
// alpha: v1.14
//
// Enables the AWS EBS in-tree driver to AWS EBS CSI Driver migration feature.
CSIMigrationAWS utilfeature.Feature = "CSIMigrationAWS"
)

func init() {
Expand Down Expand Up @@ -442,6 +460,9 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
BoundServiceAccountTokenVolume: {Default: false, PreRelease: utilfeature.Alpha},
CRIContainerLogRotation: {Default: true, PreRelease: utilfeature.Beta},
GCERegionalPersistentDisk: {Default: true, PreRelease: utilfeature.GA},
CSIMigration: {Default: false, PreRelease: utilfeature.Alpha},
CSIMigrationGCE: {Default: false, PreRelease: utilfeature.Alpha},
CSIMigrationAWS: {Default: false, PreRelease: utilfeature.Alpha},
RunAsGroup: {Default: false, PreRelease: utilfeature.Alpha},
VolumeSubpath: {Default: true, PreRelease: utilfeature.GA},
BalanceAttachedNodeVolumes: {Default: false, PreRelease: utilfeature.Alpha},
Expand Down
5 changes: 5 additions & 0 deletions pkg/volume/awsebs/aws_ebs.go
Expand Up @@ -86,6 +86,11 @@ func (plugin *awsElasticBlockStorePlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.AWSElasticBlockStore != nil)
}

func (plugin *awsElasticBlockStorePlugin) IsMigratedToCSI() bool {
return utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) &&
utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationAWS)
}

func (plugin *awsElasticBlockStorePlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/azure_dd/azure_dd.go
Expand Up @@ -121,6 +121,10 @@ func (plugin *azureDataDiskPlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.AzureDisk != nil)
}

func (plugin *azureDataDiskPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *azureDataDiskPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/azure_file/azure_file.go
Expand Up @@ -80,6 +80,10 @@ func (plugin *azureFilePlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.AzureFile != nil)
}

func (plugin *azureFilePlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *azureFilePlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/cephfs/cephfs.go
Expand Up @@ -71,6 +71,10 @@ func (plugin *cephfsPlugin) CanSupport(spec *volume.Spec) bool {
return (spec.Volume != nil && spec.Volume.CephFS != nil) || (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.CephFS != nil)
}

func (plugin *cephfsPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *cephfsPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/cinder/cinder.go
Expand Up @@ -108,6 +108,10 @@ func (plugin *cinderPlugin) CanSupport(spec *volume.Spec) bool {
return (spec.Volume != nil && spec.Volume.Cinder != nil) || (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.Cinder != nil)
}

func (plugin *cinderPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *cinderPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/configmap/configmap.go
Expand Up @@ -77,6 +77,10 @@ func (plugin *configMapPlugin) CanSupport(spec *volume.Spec) bool {
return spec.Volume != nil && spec.Volume.ConfigMap != nil
}

func (plugin *configMapPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *configMapPlugin) RequiresRemount() bool {
return true
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/csi/csi_plugin.go
Expand Up @@ -279,6 +279,10 @@ func (p *csiPlugin) CanSupport(spec *volume.Spec) bool {
return spec.PersistentVolume != nil && spec.PersistentVolume.Spec.CSI != nil
}

func (p *csiPlugin) IsMigratedToCSI() bool {
return false
}

func (p *csiPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/downwardapi/downwardapi.go
Expand Up @@ -81,6 +81,10 @@ func (plugin *downwardAPIPlugin) CanSupport(spec *volume.Spec) bool {
return spec.Volume != nil && spec.Volume.DownwardAPI != nil
}

func (plugin *downwardAPIPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *downwardAPIPlugin) RequiresRemount() bool {
return true
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/emptydir/empty_dir.go
Expand Up @@ -89,6 +89,10 @@ func (plugin *emptyDirPlugin) CanSupport(spec *volume.Spec) bool {
return false
}

func (plugin *emptyDirPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *emptyDirPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/fc/fc.go
Expand Up @@ -85,6 +85,10 @@ func (plugin *fcPlugin) CanSupport(spec *volume.Spec) bool {
return (spec.Volume != nil && spec.Volume.FC != nil) || (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.FC != nil)
}

func (plugin *fcPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *fcPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/flexvolume/plugin.go
Expand Up @@ -149,6 +149,10 @@ func (plugin *flexVolumePlugin) CanSupport(spec *volume.Spec) bool {
return sourceDriver == plugin.driverName
}

func (plugin *flexVolumePlugin) IsMigratedToCSI() bool {
return false
}

// RequiresRemount is part of the volume.VolumePlugin interface.
func (plugin *flexVolumePlugin) RequiresRemount() bool {
return false
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/flocker/flocker.go
Expand Up @@ -108,6 +108,10 @@ func (p *flockerPlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.Flocker != nil)
}

func (p *flockerPlugin) IsMigratedToCSI() bool {
return false
}

func (p *flockerPlugin) RequiresRemount() bool {
return false
}
Expand Down
5 changes: 5 additions & 0 deletions pkg/volume/gcepd/gce_pd.go
Expand Up @@ -98,6 +98,11 @@ func (plugin *gcePersistentDiskPlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.GCEPersistentDisk != nil)
}

func (plugin *gcePersistentDiskPlugin) IsMigratedToCSI() bool {
return utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) &&
utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationGCE)
}

func (plugin *gcePersistentDiskPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/git_repo/git_repo.go
Expand Up @@ -78,6 +78,10 @@ func (plugin *gitRepoPlugin) CanSupport(spec *volume.Spec) bool {
return spec.Volume != nil && spec.Volume.GitRepo != nil
}

func (plugin *gitRepoPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *gitRepoPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/glusterfs/glusterfs.go
Expand Up @@ -114,6 +114,10 @@ func (plugin *glusterfsPlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.Glusterfs != nil)
}

func (plugin *glusterfsPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *glusterfsPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/host_path/host_path.go
Expand Up @@ -83,6 +83,10 @@ func (plugin *hostPathPlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.HostPath != nil)
}

func (plugin *hostPathPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *hostPathPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/iscsi/iscsi.go
Expand Up @@ -76,6 +76,10 @@ func (plugin *iscsiPlugin) CanSupport(spec *volume.Spec) bool {
return (spec.Volume != nil && spec.Volume.ISCSI != nil) || (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.ISCSI != nil)
}

func (plugin *iscsiPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *iscsiPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/local/local.go
Expand Up @@ -82,6 +82,10 @@ func (plugin *localVolumePlugin) CanSupport(spec *volume.Spec) bool {
return (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.Local != nil)
}

func (plugin *localVolumePlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *localVolumePlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/nfs/nfs.go
Expand Up @@ -84,6 +84,10 @@ func (plugin *nfsPlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.NFS != nil)
}

func (plugin *nfsPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *nfsPlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/noop_expandable_plugin.go
Expand Up @@ -48,6 +48,10 @@ func (n *noopExpandableVolumePluginInstance) CanSupport(spec *Spec) bool {
return true
}

func (n *noopExpandableVolumePluginInstance) IsMigratedToCSI() bool {
return false
}

func (n *noopExpandableVolumePluginInstance) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/photon_pd/photon_pd.go
Expand Up @@ -74,6 +74,10 @@ func (plugin *photonPersistentDiskPlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.PhotonPersistentDisk != nil)
}

func (plugin *photonPersistentDiskPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *photonPersistentDiskPlugin) RequiresRemount() bool {
return false
}
Expand Down
35 changes: 35 additions & 0 deletions pkg/volume/plugins.go
Expand Up @@ -118,6 +118,10 @@ type VolumePlugin interface {
// const.
CanSupport(spec *Spec) bool

// IsMigratedToCSI tests whether a CSIDriver implements this plugin's
// functionality
IsMigratedToCSI() bool

// RequiresRemount returns true if this plugin requires mount calls to be
// reexecuted. Atomically updating volumes, like Downward API, depend on
// this to update the contents of the volume.
Expand Down Expand Up @@ -601,6 +605,37 @@ func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) {
return matches[0], nil
}

// IsPluginMigratableBySpec looks for a plugin that can support a given volume
// specification and whether that plugin is Migratable. If no plugins can
// support or more than one plugin can support it, return error.
func (pm *VolumePluginMgr) IsPluginMigratableBySpec(spec *Spec) (bool, error) {
pm.mutex.Lock()
defer pm.mutex.Unlock()

if spec == nil {
return false, fmt.Errorf("could not find if plugin is migratable because volume spec is nil")
}

matchedPluginNames := []string{}
matches := []VolumePlugin{}
for k, v := range pm.plugins {
if v.CanSupport(spec) {
matchedPluginNames = append(matchedPluginNames, k)
matches = append(matches, v)
}
}

if len(matches) == 0 {
// Not a known plugin (flex) in which case it is not migratable
return false, nil
}
if len(matches) > 1 {
return false, fmt.Errorf("multiple volume plugins matched: %s", strings.Join(matchedPluginNames, ","))
}

return matches[0].IsMigratedToCSI(), nil
}

// FindPluginByName fetches a plugin by name or by legacy name. If no plugin
// is found, returns error.
func (pm *VolumePluginMgr) FindPluginByName(name string) (VolumePlugin, error) {
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/plugins_test.go
Expand Up @@ -75,6 +75,10 @@ func (plugin *testPlugins) CanSupport(spec *Spec) bool {
return true
}

func (plugin *testPlugins) IsMigratedToCSI() bool {
return false
}

func (plugin *testPlugins) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/portworx/portworx.go
Expand Up @@ -95,6 +95,10 @@ func (plugin *portworxVolumePlugin) CanSupport(spec *volume.Spec) bool {
(spec.Volume != nil && spec.Volume.PortworxVolume != nil)
}

func (plugin *portworxVolumePlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *portworxVolumePlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/projected/projected.go
Expand Up @@ -96,6 +96,10 @@ func (plugin *projectedPlugin) CanSupport(spec *volume.Spec) bool {
return spec.Volume != nil && spec.Volume.Projected != nil
}

func (plugin *projectedPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *projectedPlugin) RequiresRemount() bool {
return true
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/quobyte/quobyte.go
Expand Up @@ -110,6 +110,10 @@ func (plugin *quobytePlugin) CanSupport(spec *volume.Spec) bool {
return false
}

func (plugin *quobytePlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *quobytePlugin) RequiresRemount() bool {
return false
}
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/rbd/rbd.go
Expand Up @@ -107,6 +107,10 @@ func (plugin *rbdPlugin) CanSupport(spec *volume.Spec) bool {
return (spec.Volume != nil && spec.Volume.RBD != nil) || (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.RBD != nil)
}

func (plugin *rbdPlugin) IsMigratedToCSI() bool {
return false
}

func (plugin *rbdPlugin) RequiresRemount() bool {
return false
}
Expand Down