The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/3702
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) ===
From f368da1e0d63ea4944655e242e37bd575407f2d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]> Date: Tue, 22 Aug 2017 01:30:22 -0400 Subject: [PATCH 1/2] shared: Add wrapper to translate host paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <[email protected]> --- shared/util.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/shared/util.go b/shared/util.go index 44a33c02a..d2e2526ca 100644 --- a/shared/util.go +++ b/shared/util.go @@ -100,6 +100,31 @@ func IsUnixSocket(path string) bool { return (stat.Mode() & os.ModeSocket) == os.ModeSocket } +// HostPath returns the host path for the provided path +// On a normal system, this does nothing +// When inside of a snap environment, returns the real path +func HostPath(path string) string { + // Ignore relative paths + if len(path) == 0 || path[1] != os.PathSeparator { + return path + } + + // Check if we're running in a snap package + snap := os.Getenv("SNAP") + if snap == "" { + return path + } + + // Check if the path is already snap-aware + for _, prefix := range []string{"/snap", "/var/snap", "/var/lib/snapd"} { + if strings.HasPrefix(path, prefix) { + return path + } + } + + return fmt.Sprintf("/var/lib/snapd/hostfs%s", path) +} + // VarPath returns the provided path elements joined by a slash and // appended to the end of $LXD_DIR, which defaults to /var/lib/lxd. func VarPath(path ...string) string { From 83d933955a03b218d8c9b2a1a732340bda02b4bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]> Date: Tue, 22 Aug 2017 01:30:42 -0400 Subject: [PATCH 2/2] Allow passing disk devices with the LXD snap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #3660 Signed-off-by: Stéphane Graber <[email protected]> --- lxd/container_lxc.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go index 07d972613..c9d27cb44 100644 --- a/lxd/container_lxc.go +++ b/lxd/container_lxc.go @@ -1373,7 +1373,7 @@ func (c *containerLXC) initLXC() error { networkidx++ } else if m["type"] == "disk" { // Prepare all the paths - srcPath := m["source"] + srcPath := shared.HostPath(m["source"]) tgtPath := strings.TrimPrefix(m["path"], "/") devName := fmt.Sprintf("disk.%s", strings.Replace(tgtPath, "/", "-", -1)) devPath := filepath.Join(c.DevicesPath(), devName) @@ -1606,7 +1606,7 @@ func (c *containerLXC) startCommon() (string, error) { // the storage volume, not the path where it is mounted. // So do only check for the existence of m["source"] // when m["pool"] is empty. - if m["pool"] == "" && m["source"] != "" && !shared.PathExists(m["source"]) { + if m["pool"] == "" && m["source"] != "" && !shared.PathExists(shared.HostPath(m["source"])) { return "", fmt.Errorf("Missing source '%s' for disk '%s'", m["source"], name) } case "nic": @@ -6209,7 +6209,7 @@ func (c *containerLXC) removeNetworkDevice(name string, m types.Device) error { // Disk device handling func (c *containerLXC) createDiskDevice(name string, m types.Device) (string, error) { // Prepare all the paths - srcPath := m["source"] + srcPath := shared.HostPath(m["source"]) tgtPath := strings.TrimPrefix(m["path"], "/") devName := fmt.Sprintf("disk.%s", strings.Replace(tgtPath, "/", "-", -1)) devPath := filepath.Join(c.DevicesPath(), devName) @@ -6519,7 +6519,7 @@ func (c *containerLXC) getDiskLimits() (map[string]deviceBlockLimit, error) { } // Set the source path - source := m["source"] + source := shared.HostPath(m["source"]) if source == "" { source = c.RootfsPath() }
_______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
