diff --git a/cmd/csi-addons/README.md b/cmd/csi-addons/README.md index f0e5eb80b..bf01dc0c9 100644 --- a/cmd/csi-addons/README.md +++ b/cmd/csi-addons/README.md @@ -9,21 +9,25 @@ similar to: ```console $ kubectl exec -c csi-addons csi-backend-nodeplugin -- csi-addons -h + -drivername string + name of the CSI driver -endpoint string CSI-Addons endpoint (default "unix:///tmp/csi-addons.sock") + -legacy + use legacy format for old Kubernetes versions -operation string csi-addons operation -persistentvolume string name of the PersistentVolume -stagingpath string - staging path (default "/var/lib/kubelet/plugins/kubernetes.io/csi/pv/") + staging path (default "/var/lib/kubelet/plugins/kubernetes.io/csi/") The following operations are supported: + - NodeReclaimSpace - GetIdentity - GetCapabilities - Probe - ControllerReclaimSpace - - NodeReclaimSpace ``` The above command assumes the running `csi-backend-nodeplugin` Pod has the diff --git a/cmd/csi-addons/main.go b/cmd/csi-addons/main.go index 6a2281684..195d9a89d 100644 --- a/cmd/csi-addons/main.go +++ b/cmd/csi-addons/main.go @@ -30,7 +30,7 @@ import ( const ( endpoint = "unix:///tmp/csi-addons.sock" - stagingPath = "/var/lib/kubelet/plugins/kubernetes.io/csi/pv/" + stagingPath = "/var/lib/kubelet/plugins/kubernetes.io/csi/" ) // command contains the parsed arguments that were passed while running the @@ -40,6 +40,8 @@ type command struct { stagingPath string operation string persistentVolume string + drivername string + legacy bool } // cmd is the single instance of the command struct, used inside main(). @@ -50,6 +52,8 @@ func init() { flag.StringVar(&cmd.stagingPath, "stagingpath", stagingPath, "staging path") flag.StringVar(&cmd.operation, "operation", "", "csi-addons operation") flag.StringVar(&cmd.persistentVolume, "persistentvolume", "", "name of the PersistentVolume") + flag.StringVar(&cmd.drivername, "drivername", "", "name of the CSI driver") + flag.BoolVar(&cmd.legacy, "legacy", false, "use legacy format for old Kubernetes versions") // output to show when --help is passed flag.Usage = func() { diff --git a/cmd/csi-addons/reclaimspace.go b/cmd/csi-addons/reclaimspace.go index edd93cc88..92fc616e6 100644 --- a/cmd/csi-addons/reclaimspace.go +++ b/cmd/csi-addons/reclaimspace.go @@ -18,6 +18,7 @@ package main import ( "context" + "crypto/sha256" "fmt" "github.com/csi-addons/kubernetes-csi-addons/internal/proto" @@ -83,7 +84,17 @@ func (nrs *NodeReclaimSpace) Init(c *command) error { if c.stagingPath == "" { return fmt.Errorf("stagingpath is not set") } - nrs.stagingTargetPath = fmt.Sprintf("%s/%s/globalmount", c.stagingPath, c.persistentVolume) + + if !c.legacy { + if c.drivername == "" { + return fmt.Errorf("drivername is not set") + } + + unique := sha256.Sum256([]byte(c.persistentVolume)) + nrs.stagingTargetPath = fmt.Sprintf("%s/%s/%s/globalmount", c.stagingPath, c.drivername, fmt.Sprintf("%x", unique)) + } else { + nrs.stagingTargetPath = fmt.Sprintf("%s/pv/%s/globalmount", c.stagingPath, c.persistentVolume) + } return nil }