mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-04 23:17:50 +00:00
Merge pull request #55665 from brendandburns/path
Automatic merge from submit-queue (batch tested with PRs 55908, 55829, 55293, 55653, 55665). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. If mountPath is missing, prefix with root dir. If `mountPath` is not absolute, add the os-specific root directory as a prefix. Ref: https://github.com/kubernetes/kubernetes/pull/51240 https://groups.google.com/forum/#!topic/kubernetes-sig-storage/k_0Wr2kYkpU @thockin @saad-ali @andyzhangx Note to @thockin I left the validation in place, in seems like it is a net win, since it will give a decent error message to most people, but the fall-back defaulting is there if it doesn't catch 'c:' I'm happy to rip out the validation if that is preferable to everyone. Let me know. ```release-note If a non-absolute mountPath is passed to the kubelet, prefix it with the appropriate root path. ```
This commit is contained in:
@@ -1530,7 +1530,9 @@ type VolumeMount struct {
|
||||
// Optional: Defaults to false (read-write).
|
||||
// +optional
|
||||
ReadOnly bool
|
||||
// Required. Must not contain ':'.
|
||||
// Required. If the path is not an absolute path (e.g. some/path) it
|
||||
// will be prepended with the appropriate root prefix for the operating
|
||||
// system. On Linux this is '/', on Windows this is 'C:\'.
|
||||
MountPath string
|
||||
// Path within the volume from which the container's volume should be mounted.
|
||||
// Defaults to "" (volume's root).
|
||||
|
||||
@@ -1965,13 +1965,6 @@ func ValidateVolumeMounts(mounts []core.VolumeMount, volumes sets.String, contai
|
||||
if mountpoints.Has(mnt.MountPath) {
|
||||
allErrs = append(allErrs, field.Invalid(idxPath.Child("mountPath"), mnt.MountPath, "must be unique"))
|
||||
}
|
||||
if !path.IsAbs(mnt.MountPath) {
|
||||
// also allow windows absolute path
|
||||
p := mnt.MountPath
|
||||
if len(p) < 2 || ((p[0] < 'A' || p[0] > 'Z') && (p[0] < 'a' || p[0] > 'z')) || p[1] != ':' {
|
||||
allErrs = append(allErrs, field.Invalid(idxPath.Child("mountPath"), mnt.MountPath, "must be an absolute path"))
|
||||
}
|
||||
}
|
||||
mountpoints.Insert(mnt.MountPath)
|
||||
if len(mnt.SubPath) > 0 {
|
||||
allErrs = append(allErrs, validateLocalDescendingPath(mnt.SubPath, fldPath.Child("subPath"))...)
|
||||
|
||||
@@ -3849,10 +3849,8 @@ func TestValidateVolumeMounts(t *testing.T) {
|
||||
"empty name": {{Name: "", MountPath: "/foo"}},
|
||||
"name not found": {{Name: "", MountPath: "/foo"}},
|
||||
"empty mountpath": {{Name: "abc", MountPath: ""}},
|
||||
"relative mountpath": {{Name: "abc", MountPath: "bar"}},
|
||||
"mountpath collision": {{Name: "foo", MountPath: "/path/a"}, {Name: "bar", MountPath: "/path/a"}},
|
||||
"absolute subpath": {{Name: "abc", MountPath: "/bar", SubPath: "/baz"}},
|
||||
"windows absolute subpath": {{Name: "abc", MountPath: "D", SubPath: ""}},
|
||||
"subpath in ..": {{Name: "abc", MountPath: "/bar", SubPath: "../baz"}},
|
||||
"subpath contains ..": {{Name: "abc", MountPath: "/bar", SubPath: "baz/../bat"}},
|
||||
"subpath ends in ..": {{Name: "abc", MountPath: "/bar", SubPath: "./.."}},
|
||||
|
||||
Reference in New Issue
Block a user