-
Notifications
You must be signed in to change notification settings - Fork 146
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make mount and staging dir creation flexible
This change adds an option to attach callback functions to CSI sanity for mount target directory creation. This could be used to customize the target and staging mount path creation. Also, adds `targetPath` and `stagingPath` fields to `SanityContext` to store the actual target and staging paths, derived from the sanity config. Adds an e2e test section to test the above setup.
- Loading branch information
Showing
4 changed files
with
109 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package apitest2 | ||
|
||
import ( | ||
"fmt" | ||
"os" | ||
"path" | ||
"testing" | ||
|
||
"github.com/kubernetes-csi/csi-test/pkg/sanity" | ||
) | ||
|
||
func TestMyDriverWithCustomTargetPaths(t *testing.T) { | ||
// tmpPath could be a CO specific directory under which all the target dirs | ||
// are created. For k8s, it could be /var/lib/kubelet/pods under which the | ||
// mount directories could be created. | ||
tmpPath := path.Join(os.TempDir(), "csi") | ||
config := &sanity.Config{ | ||
TargetPath: "foo/target/mount", | ||
StagingPath: "foo/staging/mount", | ||
Address: "/tmp/e2e-csi-sanity.sock", | ||
CreateTargetDir: func(targetPath string) (string, error) { | ||
targetPath = path.Join(tmpPath, targetPath) | ||
return targetPath, createTargetDir(targetPath) | ||
}, | ||
CreateStagingDir: func(targetPath string) (string, error) { | ||
targetPath = path.Join(tmpPath, targetPath) | ||
return targetPath, createTargetDir(targetPath) | ||
}, | ||
} | ||
|
||
sanity.Test(t, config) | ||
} | ||
|
||
func createTargetDir(targetPath string) error { | ||
fileInfo, err := os.Stat(targetPath) | ||
if err != nil && os.IsNotExist(err) { | ||
return os.MkdirAll(targetPath, 0755) | ||
} else if err != nil { | ||
return err | ||
} | ||
if !fileInfo.IsDir() { | ||
return fmt.Errorf("Target location %s is not a directory", targetPath) | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -88,7 +88,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
csi.ControllerServiceCapability_RPC_PUBLISH_UNPUBLISH_VOLUME) | ||
nodeStageSupported = isNodeCapabilitySupported(c, csi.NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME) | ||
if nodeStageSupported { | ||
err := createMountTargetLocation(sc.Config.StagingPath) | ||
err := createMountTargetLocation(sc.stagingPath) | ||
Expect(err).NotTo(HaveOccurred()) | ||
} | ||
nodeVolumeStatsSupported = isNodeCapabilitySupported(c, csi.NodeServiceCapability_RPC_GET_VOLUME_STATS) | ||
|
@@ -191,7 +191,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
context.Background(), | ||
&csi.NodePublishVolumeRequest{ | ||
VolumeId: "id", | ||
TargetPath: sc.Config.TargetPath, | ||
TargetPath: sc.stagingPath, | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
darkowlzz
Author
Contributor
|
||
Secrets: sc.Secrets.NodePublishVolumeSecret, | ||
}, | ||
) | ||
|
@@ -248,7 +248,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
_, err := c.NodeStageVolume( | ||
context.Background(), | ||
&csi.NodeStageVolumeRequest{ | ||
StagingTargetPath: sc.Config.StagingPath, | ||
StagingTargetPath: sc.stagingPath, | ||
VolumeCapability: &csi.VolumeCapability{ | ||
AccessType: &csi.VolumeCapability_Mount{ | ||
Mount: &csi.VolumeCapability_MountVolume{}, | ||
|
@@ -301,7 +301,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
context.Background(), | ||
&csi.NodeStageVolumeRequest{ | ||
VolumeId: "id", | ||
StagingTargetPath: sc.Config.StagingPath, | ||
StagingTargetPath: sc.stagingPath, | ||
PublishContext: map[string]string{ | ||
"device": device, | ||
}, | ||
|
@@ -328,7 +328,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
_, err := c.NodeUnstageVolume( | ||
context.Background(), | ||
&csi.NodeUnstageVolumeRequest{ | ||
StagingTargetPath: sc.Config.StagingPath, | ||
StagingTargetPath: sc.stagingPath, | ||
}) | ||
Expect(err).To(HaveOccurred()) | ||
|
||
|
@@ -478,7 +478,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
Mode: csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER, | ||
}, | ||
}, | ||
StagingTargetPath: sc.Config.StagingPath, | ||
StagingTargetPath: sc.stagingPath, | ||
VolumeContext: vol.GetVolume().GetVolumeContext(), | ||
PublishContext: conpubvol.GetPublishContext(), | ||
Secrets: sc.Secrets.NodeStageVolumeSecret, | ||
|
@@ -491,13 +491,13 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
By("publishing the volume on a node") | ||
var stagingPath string | ||
if nodeStageSupported { | ||
stagingPath = sc.Config.StagingPath | ||
stagingPath = sc.stagingPath | ||
} | ||
nodepubvol, err := c.NodePublishVolume( | ||
context.Background(), | ||
&csi.NodePublishVolumeRequest{ | ||
VolumeId: vol.GetVolume().GetVolumeId(), | ||
TargetPath: sc.Config.TargetPath, | ||
TargetPath: sc.targetPath, | ||
StagingTargetPath: stagingPath, | ||
VolumeCapability: &csi.VolumeCapability{ | ||
AccessType: &csi.VolumeCapability_Mount{ | ||
|
@@ -536,7 +536,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
context.Background(), | ||
&csi.NodeUnpublishVolumeRequest{ | ||
VolumeId: vol.GetVolume().GetVolumeId(), | ||
TargetPath: sc.Config.TargetPath, | ||
TargetPath: sc.targetPath, | ||
}) | ||
Expect(err).NotTo(HaveOccurred()) | ||
Expect(nodeunpubvol).NotTo(BeNil()) | ||
|
@@ -547,7 +547,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
context.Background(), | ||
&csi.NodeUnstageVolumeRequest{ | ||
VolumeId: vol.GetVolume().GetVolumeId(), | ||
StagingTargetPath: sc.Config.StagingPath, | ||
StagingTargetPath: sc.stagingPath, | ||
}, | ||
) | ||
Expect(err).NotTo(HaveOccurred()) | ||
|
@@ -661,7 +661,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
Mode: csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER, | ||
}, | ||
}, | ||
StagingTargetPath: sc.Config.StagingPath, | ||
StagingTargetPath: sc.stagingPath, | ||
VolumeContext: vol.GetVolume().GetVolumeContext(), | ||
PublishContext: conpubvol.GetPublishContext(), | ||
Secrets: sc.Secrets.NodeStageVolumeSecret, | ||
|
@@ -674,13 +674,13 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
By("publishing the volume on a node") | ||
var stagingPath string | ||
if nodeStageSupported { | ||
stagingPath = sc.Config.StagingPath | ||
stagingPath = sc.stagingPath | ||
} | ||
nodepubvol, err := c.NodePublishVolume( | ||
context.Background(), | ||
&csi.NodePublishVolumeRequest{ | ||
VolumeId: vol.GetVolume().GetVolumeId(), | ||
TargetPath: sc.Config.TargetPath, | ||
TargetPath: sc.targetPath, | ||
StagingTargetPath: stagingPath, | ||
VolumeCapability: &csi.VolumeCapability{ | ||
AccessType: &csi.VolumeCapability_Mount{ | ||
|
@@ -705,7 +705,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
context.Background(), | ||
&csi.NodeGetVolumeStatsRequest{ | ||
VolumeId: vol.GetVolume().GetVolumeId(), | ||
VolumePath: sc.Config.TargetPath, | ||
VolumePath: sc.targetPath, | ||
}, | ||
) | ||
Expect(err).ToNot(HaveOccurred()) | ||
|
@@ -718,7 +718,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
context.Background(), | ||
&csi.NodeUnpublishVolumeRequest{ | ||
VolumeId: vol.GetVolume().GetVolumeId(), | ||
TargetPath: sc.Config.TargetPath, | ||
TargetPath: sc.targetPath, | ||
}) | ||
Expect(err).NotTo(HaveOccurred()) | ||
Expect(nodeunpubvol).NotTo(BeNil()) | ||
|
@@ -729,7 +729,7 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { | |
context.Background(), | ||
&csi.NodeUnstageVolumeRequest{ | ||
VolumeId: vol.GetVolume().GetVolumeId(), | ||
StagingTargetPath: sc.Config.StagingPath, | ||
StagingTargetPath: sc.stagingPath, | ||
}, | ||
) | ||
Expect(err).NotTo(HaveOccurred()) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
path argument changes in this file seem mostly simple rename, but this one is semantic change from targetPath to stagingPath.
Intentional?