[prev in list] [next in list] [prev in thread] [next in thread]
List: lxc-devel
Subject: [lxc-devel] [lxd/master] Instance: Fix copying snapshot to new instance in different project
From: tomponline on Github <lxc-bot () linuxcontainers ! org>
Date: 2020-12-18 14:27:07
Message-ID: 5fdcbc3b.1c69fb81.1c6e.0e4dSMTPIN_ADDED_MISSING () mx ! google ! com
[Download RAW message or body]
[Attachment #2 (text/x-mailbox)]
The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/8275
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) ===
Fixes https://github.com/lxc/lxd/issues/8273
Adds test for this scenario.
[Attachment #3 (text/plain)]
From 954eadfa158f37860127f06422658a6d73ced0a0 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott@canonical.com>
Date: Fri, 18 Dec 2020 14:02:06 +0000
Subject: [PATCH 1/5] lxd/instances/post: Use source.Project when loading
instance to get instance type in containersPost
Fixes #8273
Signed-off-by: Thomas Parrott <thomas.parrott@canonical.com>
---
lxd/instances_post.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lxd/instances_post.go b/lxd/instances_post.go
index 92047db448..e10f4d79e1 100644
--- a/lxd/instances_post.go
+++ b/lxd/instances_post.go
@@ -838,7 +838,7 @@ func containersPost(d *Daemon, r *http.Request) response.Response \
{ return fmt.Errorf("Must specify a source instance")
}
- source, err := instance.LoadInstanceDatabaseObject(tx, project, \
req.Source.Source) + source, err := instance.LoadInstanceDatabaseObject(tx, \
req.Source.Project, req.Source.Source) if err != nil {
return errors.Wrap(err, "Load source instance from database")
}
From 48df8c87eef5e4e106d1f8f740464773541d9233 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott@canonical.com>
Date: Fri, 18 Dec 2020 14:06:24 +0000
Subject: [PATCH 2/5] lxd/instances/post: Rename project to targetProject to
differentiate between source.Project in containersPost
Signed-off-by: Thomas Parrott <thomas.parrott@canonical.com>
---
lxd/instances_post.go | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/lxd/instances_post.go b/lxd/instances_post.go
index e10f4d79e1..edc32e78ba 100644
--- a/lxd/instances_post.go
+++ b/lxd/instances_post.go
@@ -722,12 +722,12 @@ func createFromBackup(d *Daemon, projectName string, data \
io.Reader, pool string }
func containersPost(d *Daemon, r *http.Request) response.Response {
- project := projectParam(r)
+ targetProject := projectParam(r)
logger.Debugf("Responding to instance create")
// If we're getting binary content, process separately
if r.Header.Get("Content-Type") == "application/octet-stream" {
- return createFromBackup(d, project, r.Body, r.Header.Get("X-LXD-pool"), \
r.Header.Get("X-LXD-name")) + return createFromBackup(d, targetProject, r.Body, \
r.Header.Get("X-LXD-pool"), r.Header.Get("X-LXD-name")) }
// Parse the request
@@ -754,7 +754,7 @@ func containersPost(d *Daemon, r *http.Request) response.Response \
{ // the selected node is the local one, this is effectively a
// no-op, since GetNodeWithLeastInstances() will return an empty
// string.
- architectures, err := instance.SuitableArchitectures(d.State(), project, req)
+ architectures, err := instance.SuitableArchitectures(d.State(), targetProject, \
req) if err != nil {
return response.BadRequest(err)
}
@@ -780,7 +780,7 @@ func containersPost(d *Daemon, r *http.Request) response.Response \
{ return response.SmartError(err)
}
- client = client.UseProject(project)
+ client = client.UseProject(targetProject)
client = client.UseTarget(targetNode)
logger.Debugf("Forward instance post request to %s", address)
@@ -790,7 +790,7 @@ func containersPost(d *Daemon, r *http.Request) response.Response \
{ }
opAPI := op.Get()
- return operations.ForwardedOperationResponse(project, &opAPI)
+ return operations.ForwardedOperationResponse(targetProject, &opAPI)
}
}
@@ -849,13 +849,13 @@ func containersPost(d *Daemon, r *http.Request) \
response.Response { }
}
- err := projecthelpers.AllowInstanceCreation(tx, project, req)
+ err := projecthelpers.AllowInstanceCreation(tx, targetProject, req)
if err != nil {
return err
}
if req.Name == "" {
- names, err := tx.GetInstanceNames(project)
+ names, err := tx.GetInstanceNames(targetProject)
if err != nil {
return err
}
@@ -883,13 +883,13 @@ func containersPost(d *Daemon, r *http.Request) \
response.Response {
switch req.Source.Type {
case "image":
- return createFromImage(d, project, &req)
+ return createFromImage(d, targetProject, &req)
case "none":
- return createFromNone(d, project, &req)
+ return createFromNone(d, targetProject, &req)
case "migration":
- return createFromMigration(d, project, &req)
+ return createFromMigration(d, targetProject, &req)
case "copy":
- return createFromCopy(d, project, &req)
+ return createFromCopy(d, targetProject, &req)
default:
return response.BadRequest(fmt.Errorf("Unknown source type %s", req.Source.Type))
}
From dc934a91e4315f2a7a2c9affce19d51f4c8611b1 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott@canonical.com>
Date: Fri, 18 Dec 2020 14:06:50 +0000
Subject: [PATCH 3/5] lxd/instances/post: Error quoting in containersPost
Signed-off-by: Thomas Parrott <thomas.parrott@canonical.com>
---
lxd/instances_post.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lxd/instances_post.go b/lxd/instances_post.go
index edc32e78ba..5d8d0494c7 100644
--- a/lxd/instances_post.go
+++ b/lxd/instances_post.go
@@ -822,7 +822,7 @@ func containersPost(d *Daemon, r *http.Request) response.Response \
{ }
if strings.Contains(req.Name, shared.SnapshotDelimiter) {
- return response.BadRequest(fmt.Errorf("Invalid instance name: '%s' is reserved for \
snapshots", shared.SnapshotDelimiter)) + return \
response.BadRequest(fmt.Errorf("Invalid instance name: %q is reserved for snapshots", \
shared.SnapshotDelimiter)) }
// Check that the project's limits are not violated. Also, possibly
From 2cc26d7eb34429ee0486c1fbac99cbe6447a192d Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott@canonical.com>
Date: Fri, 18 Dec 2020 14:16:49 +0000
Subject: [PATCH 4/5] lxd/instances/post: Add comment about default instance
type for migration in containersPost
Signed-off-by: Thomas Parrott <thomas.parrott@canonical.com>
---
lxd/instances_post.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lxd/instances_post.go b/lxd/instances_post.go
index 5d8d0494c7..54bf6c88ea 100644
--- a/lxd/instances_post.go
+++ b/lxd/instances_post.go
@@ -845,7 +845,7 @@ func containersPost(d *Daemon, r *http.Request) response.Response \
{
req.Type = api.InstanceType(source.Type.String())
case "migration":
- req.Type = api.InstanceTypeContainer
+ req.Type = api.InstanceTypeContainer // Default to container if not specified.
}
}
From 0fe49e76e33f632fce66e39d92dc01ccff0c1b6c Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott@canonical.com>
Date: Fri, 18 Dec 2020 14:26:13 +0000
Subject: [PATCH 5/5] test/suites/projects: Adds tests for copying snapshot to
another project
Signed-off-by: Thomas Parrott <thomas.parrott@canonical.com>
---
test/suites/projects.sh | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/test/suites/projects.sh b/test/suites/projects.sh
index 5b676ba6bb..7be7499049 100644
--- a/test/suites/projects.sh
+++ b/test/suites/projects.sh
@@ -153,6 +153,10 @@ test_projects_copy() {
lxc --project foo snapshot c1
lxc --project foo snapshot c1
+ lxc --project foo copy c1/snap0 c1 --target-project bar
+ lxc --project bar start c1
+ lxc --project bar delete c1 -f
+
lxc --project foo copy c1 c1 --target-project bar
lxc --project foo start c1
lxc --project bar start c1
[Attachment #4 (text/plain)]
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic