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