[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