From fc6443ce2c3a2b36b9f7dbf2388055751b612fdd Mon Sep 17 00:00:00 2001 From: Humble Chirammal Date: Fri, 8 Dec 2017 07:11:48 +0530 Subject: [PATCH] Add volID based delete() and resize() if volID is available in pv spec. Signed-off-by: Humble Chirammal --- pkg/volume/glusterfs/glusterfs.go | 33 ++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/pkg/volume/glusterfs/glusterfs.go b/pkg/volume/glusterfs/glusterfs.go index c42e3cdf794..144724ecfef 100644 --- a/pkg/volume/glusterfs/glusterfs.go +++ b/pkg/volume/glusterfs/glusterfs.go @@ -596,8 +596,13 @@ func (d *glusterfsVolumeDeleter) getGid() (int, bool, error) { func (d *glusterfsVolumeDeleter) Delete() error { glog.V(2).Infof("delete volume: %s ", d.glusterfsMounter.path) + volumeName := d.glusterfsMounter.path - volumeID := dstrings.TrimPrefix(volumeName, volPrefix) + volumeID, err := getVolumeID(d.spec, volumeName) + if err != nil { + return fmt.Errorf("failed to get volumeID, err: %v", err) + } + class, err := volutil.GetClassForVolume(d.plugin.host.GetKubeClient(), d.spec) if err != nil { return err @@ -1048,13 +1053,35 @@ func parseClassParameters(params map[string]string, kubeClient clientset.Interfa return &cfg, nil } +// getVolumeID returns volumeID from the PV or volumename. +func getVolumeID(pv *v1.PersistentVolume, volumeName string) (string, error) { + volumeID := "" + + // Get volID from pvspec if available, else fill it from volumename. + if pv != nil { + if pv.Annotations["VolID"] != "" { + volumeID = pv.Annotations["VolID"] + } else { + volumeID = dstrings.TrimPrefix(volumeName, volPrefix) + } + } else { + return volumeID, fmt.Errorf("provided PV spec is nil") + } + if volumeID == "" { + return volumeID, fmt.Errorf("volume ID is empty") + } + return volumeID, nil +} + func (plugin *glusterfsPlugin) ExpandVolumeDevice(spec *volume.Spec, newSize resource.Quantity, oldSize resource.Quantity) (resource.Quantity, error) { pvSpec := spec.PersistentVolume.Spec glog.V(2).Infof("Request to expand volume: %s ", pvSpec.Glusterfs.Path) volumeName := pvSpec.Glusterfs.Path + volumeID, err := getVolumeID(spec.PersistentVolume, volumeName) - // Fetch the volume for expansion. - volumeID := dstrings.TrimPrefix(volumeName, volPrefix) + if err != nil { + return oldSize, fmt.Errorf("failed to get volumeID, err: %v", err) + } //Get details of SC. class, err := volutil.GetClassForVolume(plugin.host.GetKubeClient(), spec.PersistentVolume)