Skip to content

Commit

Permalink
Merge pull request #96396 from marosset/windows-smb-mount-symlink-fix
Browse files Browse the repository at this point in the history
fixing issue where SMB share paths cannot resolve with CRI-containerD on Windows
  • Loading branch information
k8s-ci-robot committed Nov 10, 2020
2 parents 38f5dc8 + b14e833 commit 1d4c0ad
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions staging/src/k8s.io/mount-utils/mount_windows.go
Expand Up @@ -132,12 +132,23 @@ func (mounter *Mounter) MountSensitive(source string, target string, fstype stri
}
}

output, err := exec.Command("cmd", "/c", "mklink", "/D", target, bindSource).CombinedOutput()
// There is an issue in golang where EvalSymlinks fails on Windows when passed a
// UNC share root path without a trailing backslash.
// Ex: \\SERVER\share will fail to resolve but \\SERVER\share\ will resolve
// containerD on Windows calls EvalSymlinks so we'll add the backslash when making the symlink if it is missing.
// https://github.com/golang/go/pull/42096 fixes this issue in golang but a fix will not be available until
// golang v1.16
mklinkSource := bindSource
if !strings.HasSuffix(mklinkSource, "\\") {
mklinkSource = mklinkSource + "\\"
}

output, err := exec.Command("cmd", "/c", "mklink", "/D", target, mklinkSource).CombinedOutput()
if err != nil {
klog.Errorf("mklink failed: %v, source(%q) target(%q) output: %q", err, bindSource, target, string(output))
klog.Errorf("mklink failed: %v, source(%q) target(%q) output: %q", err, mklinkSource, target, string(output))
return err
}
klog.V(2).Infof("mklink source(%q) on target(%q) successfully, output: %q", bindSource, target, string(output))
klog.V(2).Infof("mklink source(%q) on target(%q) successfully, output: %q", mklinkSource, target, string(output))

return nil
}
Expand Down

0 comments on commit 1d4c0ad

Please sign in to comment.