The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/8062

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) ===
I noticed this issue whilst working on OVN CI tests.

The reproducer was:

```
lxc launch images:ubuntu/focal c1 --project default
lxc exec c1 -- whoami --project default # Succeeds
lxc init images:ubuntu/focal c1 --project test
lxc exec c1 -- whoami --project default # Fails. Because the /var/log/lxd/c1/lxc.conf was removed when creating c1 in test project.
```
From 0364002a9db6bfa9707710b7b64a5ca0a93514a5 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 20 Oct 2020 13:51:58 +0100
Subject: [PATCH 1/5] lxd/instance: Use project aware inst.LogPath() function
 when clearing log dir in instanceCreateInternal

Avoids clearing lxc.conf of a different container and preventing access to it.

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/instance.go | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lxd/instance.go b/lxd/instance.go
index 2d812f6b97..71718a6390 100644
--- a/lxd/instance.go
+++ b/lxd/instance.go
@@ -640,15 +640,15 @@ func instanceCreateInternal(s *state.State, args 
db.InstanceArgs) (instance.Inst
                s.Cluster.DeleteInstance(dbInst.Project, dbInst.Name)
        }()
 
-       // Wipe any existing log for this instance name.
-       os.RemoveAll(shared.LogPath(args.Name))
-
        args = db.InstanceToArgs(&dbInst)
        inst, err := instance.Create(s, args)
        if err != nil {
                return nil, errors.Wrap(err, "Create instance")
        }
 
+       // Wipe any existing log for this instance name.
+       os.RemoveAll(inst.LogPath())
+
        revert = false
        return inst, nil
 }

From c029aab2ca63ea6a83f6f73be8d0e8b7a827a525 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 20 Oct 2020 13:57:21 +0100
Subject: [PATCH 2/5] lxd/instance/drivers/driver/lxc: Project aware rename of
 log path in Rename()

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/instance/drivers/driver_lxc.go | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lxd/instance/drivers/driver_lxc.go 
b/lxd/instance/drivers/driver_lxc.go
index e4290118f5..e99c01f4df 100644
--- a/lxd/instance/drivers/driver_lxc.go
+++ b/lxd/instance/drivers/driver_lxc.go
@@ -3682,9 +3682,10 @@ func (c *lxc) Rename(newName string) error {
        }
 
        // Rename the logging path.
-       os.RemoveAll(shared.LogPath(newName))
+       newFullName := project.Instance(c.Project(), c.Name())
+       os.RemoveAll(shared.LogPath(newFullName))
        if shared.PathExists(c.LogPath()) {
-               err := os.Rename(c.LogPath(), shared.LogPath(newName))
+               err := os.Rename(c.LogPath(), shared.LogPath(newFullName))
                if err != nil {
                        logger.Error("Failed renaming container", ctxMap)
                        return err

From feb558885cbedfbbf55911a5cba96d0890720b74 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 20 Oct 2020 13:58:18 +0100
Subject: [PATCH 3/5] lxd/instance/drivers/driver/qemu: Project aware rename of
 log path in Rename()

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/instance/drivers/driver_qemu.go | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lxd/instance/drivers/driver_qemu.go 
b/lxd/instance/drivers/driver_qemu.go
index 1abaddbbb2..733a868605 100644
--- a/lxd/instance/drivers/driver_qemu.go
+++ b/lxd/instance/drivers/driver_qemu.go
@@ -2647,9 +2647,10 @@ func (vm *qemu) Rename(newName string) error {
        }
 
        // Rename the logging path.
-       os.RemoveAll(shared.LogPath(newName))
+       newFullName := project.Instance(vm.Project(), vm.Name())
+       os.RemoveAll(shared.LogPath(newFullName))
        if shared.PathExists(vm.LogPath()) {
-               err := os.Rename(vm.LogPath(), shared.LogPath(newName))
+               err := os.Rename(vm.LogPath(), shared.LogPath(newFullName))
                if err != nil {
                        logger.Error("Failed renaming instance", ctxMap)
                        return err

From fa7f5e39b6ad4cd27b6e0dd38a3d79d9c147c293 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 20 Oct 2020 14:00:26 +0100
Subject: [PATCH 4/5] lxd/instance/drivers/driver/lxc: Makes collectCRIULogFile
 project log path aware

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/instance/drivers/driver_lxc.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxd/instance/drivers/driver_lxc.go 
b/lxd/instance/drivers/driver_lxc.go
index e99c01f4df..81d814e3df 100644
--- a/lxd/instance/drivers/driver_lxc.go
+++ b/lxd/instance/drivers/driver_lxc.go
@@ -4815,7 +4815,7 @@ func (c *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
 
 func collectCRIULogFile(c instance.Instance, imagesDir string, function 
string, method string) error {
        t := time.Now().Format(time.RFC3339)
-       newPath := shared.LogPath(c.Name(), fmt.Sprintf("%s_%s_%s.log", 
function, method, t))
+       newPath := filepath.Join(c.LogPath(), fmt.Sprintf("%s_%s_%s.log", 
function, method, t))
        return shared.FileCopy(filepath.Join(imagesDir, fmt.Sprintf("%s.log", 
method)), newPath)
 }
 

From 645ce23fa728eb3922df5466361e6ae0b344c5c4 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 20 Oct 2020 14:11:17 +0100
Subject: [PATCH 5/5] lxd/instance/logs: Makes containerLogsGet project aware

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/instance_logs.go | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/lxd/instance_logs.go b/lxd/instance_logs.go
index 0f7df6893b..c63fb5afde 100644
--- a/lxd/instance_logs.go
+++ b/lxd/instance_logs.go
@@ -53,11 +53,11 @@ func containerLogsGet(d *Daemon, r *http.Request) 
response.Response {
                return response.SmartError(err)
        }
 
-       project := projectParam(r)
+       projectName := projectParam(r)
        name := mux.Vars(r)["name"]
 
        // Handle requests targeted to a container on a different node
-       resp, err := forwardedResponseIfInstanceIsRemote(d, r, project, name, 
instanceType)
+       resp, err := forwardedResponseIfInstanceIsRemote(d, r, projectName, 
name, instanceType)
        if err != nil {
                return response.SmartError(err)
        }
@@ -72,7 +72,8 @@ func containerLogsGet(d *Daemon, r *http.Request) 
response.Response {
 
        result := []string{}
 
-       dents, err := ioutil.ReadDir(shared.LogPath(name))
+       fullName := project.Instance(projectName, name)
+       dents, err := ioutil.ReadDir(shared.LogPath(fullName))
        if err != nil {
                return response.SmartError(err)
        }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to