Backport of [CSI] Prevent stage_publish_base_dir from being subdir of mount_dir into release/1.6.x #19463

Co-authored-by: Grant Griffiths <ggp493@gmail.com>
This commit is contained in:
hc-github-team-nomad-core 2023-12-13 13:52:08 -06:00 committed by GitHub
parent ede76a85e0
commit 8d3049b49b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 1 deletions

3
.changelog/19441.txt Normal file
View file

@ -0,0 +1,3 @@
```release-note:bug
csi: Added validation to `csi_plugin` blocks to prevent `stage_publish_base_dir` from being a subdirectory of `mount_dir`
```

View file

@ -7842,6 +7842,11 @@ func (t *Task) Validate(jobType string, tg *TaskGroup) error {
mErr.Errors = append(mErr.Errors, fmt.Errorf("CSIPluginConfig PluginType must be one of 'node', 'controller', or 'monolith', got: \"%s\"", t.CSIPluginConfig.Type))
}
if t.CSIPluginConfig.StagePublishBaseDir != "" && t.CSIPluginConfig.MountDir != "" &&
strings.HasPrefix(t.CSIPluginConfig.StagePublishBaseDir, t.CSIPluginConfig.MountDir) {
mErr.Errors = append(mErr.Errors, fmt.Errorf("CSIPluginConfig StagePublishBaseDir must not be a subdirectory of MountDir, got: StagePublishBaseDir=\"%s\" MountDir=\"%s\"", t.CSIPluginConfig.StagePublishBaseDir, t.CSIPluginConfig.MountDir))
}
// TODO: Investigate validation of the PluginMountDir. Not much we can do apart from check IsAbs until after we understand its execution environment though :(
}

View file

@ -2905,6 +2905,16 @@ func TestTask_Validate_CSIPluginConfig(t *testing.T) {
},
expectedErr: "CSIPluginConfig PluginType must be one of 'node', 'controller', or 'monolith', got: \"nonsense\"",
},
{
name: "requires staging publish base dir to not be a subdir of mountdir",
pc: &TaskCSIPluginConfig{
ID: "com.hashicorp.csi",
Type: "monolith",
MountDir: "/csi",
StagePublishBaseDir: "/csi/local",
},
expectedErr: "CSIPluginConfig StagePublishBaseDir must not be a subdirectory of MountDir, got: StagePublishBaseDir=\"/csi/local\" MountDir=\"/csi\"",
},
}
for _, tt := range table {

View file

@ -49,7 +49,8 @@ csi_plugin {
- `stage_publish_base_dir` `(string: <optional>)` - The base directory
path inside the container where the plugin will be instructed to
stage and publish volumes. This field is typically not required.
Refer to your CSI plugin's documentation for details.
Refer to your CSI plugin's documentation for details. This can not
be a subdirectory of `mount_dir`.
- `health_timeout` `(duration: <optional>)` - The duration that
the plugin supervisor will wait before restarting an unhealthy