diff --git a/examples/volumes/flexvolume/lvm b/examples/volumes/flexvolume/lvm index 04a2077897b..f60af484044 100755 --- a/examples/volumes/flexvolume/lvm +++ b/examples/volumes/flexvolume/lvm @@ -24,7 +24,6 @@ usage() { err "\t$0 waitforattach " err "\t$0 mountdevice " err "\t$0 unmountdevice " - err "\t$0 getvolumename " err "\t$0 isattached " exit 1 } @@ -138,17 +137,6 @@ unmountdevice() { exit 0 } -getvolumename() { - JSON_PARAMS=$1 - DMDEV=$(getdevice) - - # get lvm device UUID - UUID=`lvs -o lv_uuid --noheadings ${DMDEV} 2>/dev/null|tr -d " "` - - log "{\"status\": \"Success\", \"volumeName\":\"${UUID}\"}" - exit 0 -} - isattached() { log "{\"status\": \"Success\", \"attached\":true}" exit 0 @@ -183,15 +171,12 @@ case "$op" in unmountdevice) unmountdevice $* ;; - getvolumename) - getvolumename $* - ;; isattached) isattached $* ;; *) - err "{ \"status\": \"Not supported\" }" - exit 1 + log "{ \"status\": \"Not supported\" }" + exit 0 esac exit 1 diff --git a/examples/volumes/flexvolume/nfs b/examples/volumes/flexvolume/nfs index 290af49d504..6a3e29bc3e5 100755 --- a/examples/volumes/flexvolume/nfs +++ b/examples/volumes/flexvolume/nfs @@ -21,7 +21,6 @@ usage() { err "\t$0 init" err "\t$0 mount " err "\t$0 unmount " - err "\t$0 getvolumename " exit 1 } @@ -81,14 +80,6 @@ unmount() { exit 0 } -getvolumename() { - NFS_SERVER=$(echo $1 | jq -r '.server') - SHARE=$(echo $1 | jq -r '.share') - - log "{\"status\": \"Success\", \"volumeName\": \"${NFS_SERVER}/${SHARE}\"}" - exit 0 -} - op=$1 if [ "$op" = "init" ]; then @@ -113,8 +104,8 @@ case "$op" in getvolumename $* ;; *) - err "{ \"status\": \"Not supported\" }" - exit 1 + log "{ \"status\": \"Not supported\" }" + exit 0 esac exit 1 diff --git a/pkg/volume/flexvolume/attacher.go b/pkg/volume/flexvolume/attacher.go index f3cb8517d4b..58bfb701329 100644 --- a/pkg/volume/flexvolume/attacher.go +++ b/pkg/volume/flexvolume/attacher.go @@ -33,6 +33,7 @@ var _ volume.Attacher = &flexVolumeAttacher{} // Attach is part of the volume.Attacher interface func (a *flexVolumeAttacher) Attach(spec *volume.Spec, hostName types.NodeName) (string, error) { + call := a.plugin.NewDriverCall(attachCmd) call.AppendSpec(spec, a.plugin.host, nil) call.Append(string(hostName)) diff --git a/pkg/volume/flexvolume/detacher.go b/pkg/volume/flexvolume/detacher.go index 5b90584498a..ed4c1529ad5 100644 --- a/pkg/volume/flexvolume/detacher.go +++ b/pkg/volume/flexvolume/detacher.go @@ -34,14 +34,15 @@ type flexVolumeDetacher struct { var _ volume.Detacher = &flexVolumeDetacher{} // Detach is part of the volume.Detacher interface. -func (d *flexVolumeDetacher) Detach(deviceName string, hostName types.NodeName) error { +func (d *flexVolumeDetacher) Detach(pvOrVolumeName string, hostName types.NodeName) error { + call := d.plugin.NewDriverCall(detachCmd) - call.Append(deviceName) + call.Append(pvOrVolumeName) call.Append(string(hostName)) _, err := call.Run() if isCmdNotSupportedErr(err) { - return (*detacherDefaults)(d).Detach(deviceName, hostName) + return (*detacherDefaults)(d).Detach(pvOrVolumeName, hostName) } return err } diff --git a/pkg/volume/flexvolume/driver-call.go b/pkg/volume/flexvolume/driver-call.go index 3866e535c48..848998c56bf 100644 --- a/pkg/volume/flexvolume/driver-call.go +++ b/pkg/volume/flexvolume/driver-call.go @@ -46,11 +46,12 @@ const ( unmountCmd = "unmount" // Option keys - optionFSType = "kubernetes.io/fsType" - optionReadWrite = "kubernetes.io/readwrite" - optionKeySecret = "kubernetes.io/secret" - optionFSGroup = "kubernetes.io/fsGroup" - optionMountsDir = "kubernetes.io/mountsDir" + optionFSType = "kubernetes.io/fsType" + optionReadWrite = "kubernetes.io/readwrite" + optionKeySecret = "kubernetes.io/secret" + optionFSGroup = "kubernetes.io/fsGroup" + optionMountsDir = "kubernetes.io/mountsDir" + optionPVorVolumeName = "kubernetes.io/pvOrVolumeName" optionKeyPodName = "kubernetes.io/pod.name" optionKeyPodNamespace = "kubernetes.io/pod.namespace" @@ -174,6 +175,8 @@ func NewOptionsForDriver(spec *volume.Spec, host volume.VolumeHost, extraOptions options[optionReadWrite] = "rw" } + options[optionPVorVolumeName] = spec.Name() + for key, value := range extraOptions { options[key] = value } diff --git a/pkg/volume/flexvolume/plugin.go b/pkg/volume/flexvolume/plugin.go index 171ca60e37b..0e6ab8e1efc 100644 --- a/pkg/volume/flexvolume/plugin.go +++ b/pkg/volume/flexvolume/plugin.go @@ -21,11 +21,12 @@ import ( "strings" "sync" + "github.com/golang/glog" + "k8s.io/apimachinery/pkg/types" api "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/util/exec" "k8s.io/kubernetes/pkg/util/mount" - utilstrings "k8s.io/kubernetes/pkg/util/strings" "k8s.io/kubernetes/pkg/volume" ) @@ -70,13 +71,21 @@ func (plugin *flexVolumePlugin) GetVolumeName(spec *volume.Spec) (string, error) call := plugin.NewDriverCall(getVolumeNameCmd) call.AppendSpec(spec, plugin.host, nil) - status, err := call.Run() + _, err := call.Run() if isCmdNotSupportedErr(err) { return (*pluginDefaults)(plugin).GetVolumeName(spec) } else if err != nil { return "", err } - return utilstrings.EscapeQualifiedNameForDisk(status.VolumeName), nil + + name, err := (*pluginDefaults)(plugin).GetVolumeName(spec) + if err != nil { + return "", err + } + + glog.Warning(logPrefix(plugin), "GetVolumeName is not supported yet. Defaulting to PV or volume name: ", name) + + return name, nil } // CanSupport is part of the volume.VolumePlugin interface. diff --git a/pkg/volume/flexvolume/plugin_test.go b/pkg/volume/flexvolume/plugin_test.go index e25f360381d..c45ebb0f3db 100644 --- a/pkg/volume/flexvolume/plugin_test.go +++ b/pkg/volume/flexvolume/plugin_test.go @@ -41,7 +41,7 @@ func TestGetVolumeName(t *testing.T) { spec := fakeVolumeSpec() plugin, _ := testPlugin() plugin.runner = fakeRunner( - assertDriverCall(t, fakeVolumeNameOutput("/dev/sdx"), getVolumeNameCmd, + assertDriverCall(t, fakeVolumeNameOutput(spec.Name()), getVolumeNameCmd, specJson(plugin, spec, nil)), ) @@ -49,7 +49,7 @@ func TestGetVolumeName(t *testing.T) { if err != nil { t.Errorf("GetVolumeName() failed: %v", err) } - expectedName := "~dev~sdx" + expectedName := spec.Name() if name != expectedName { t.Errorf("GetVolumeName() returned %v instead of %v", name, expectedName) }