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

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 2c9fdc5afd27c2d90dd9dfa176e2ebab8295c7e0 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 24 Nov 2020 16:46:40 +0000
Subject: [PATCH 1/8] shared/instance: golint fixes

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

diff --git a/shared/instance.go b/shared/instance.go
index f4ac70993b..0b4ddff8e9 100644
--- a/shared/instance.go
+++ b/shared/instance.go
@@ -14,8 +14,10 @@ import (
        "github.com/lxc/lxd/shared/validate"
 )
 
+// InstanceAction indicates the type of action being performed.
 type InstanceAction string
 
+// InstanceAction types.
 const (
        Stop     InstanceAction = "stop"
        Start    InstanceAction = "start"

From 79941f59a92d0734d4273c75fb197c85a964163c Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 24 Nov 2020 16:46:53 +0000
Subject: [PATCH 2/8] shared/instance: Adds ConfigVolatilePrefix constant

To avoid inconsistent use of "volatile" and "volatile." prefix checks.

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

diff --git a/shared/instance.go b/shared/instance.go
index 0b4ddff8e9..2a0986f9b8 100644
--- a/shared/instance.go
+++ b/shared/instance.go
@@ -26,6 +26,9 @@ const (
        Unfreeze InstanceAction = "unfreeze"
 )
 
+// ConfigVolatilePrefix indicates the prefix used for volatile config keys.
+const ConfigVolatilePrefix = "volatile."
+
 // IsRootDiskDevice returns true if the given device representation is 
configured as root disk for
 // an instance. It typically get passed a specific entry of 
api.Instance.Devices.
 func IsRootDiskDevice(device map[string]string) bool {

From 1e7d93cc87128b919c2d6dbe5ae280bb9d5d5476 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 24 Nov 2020 16:47:21 +0000
Subject: [PATCH 3/8] shared/instance: ConfigVolatilePrefix usage

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

diff --git a/shared/instance.go b/shared/instance.go
index 2a0986f9b8..000825c247 100644
--- a/shared/instance.go
+++ b/shared/instance.go
@@ -275,7 +275,7 @@ func ConfigKeyChecker(key string) (func(value string) 
error, error) {
                return f, nil
        }
 
-       if strings.HasPrefix(key, "volatile.") {
+       if strings.HasPrefix(key, ConfigVolatilePrefix) {
                if strings.HasSuffix(key, ".hwaddr") {
                        return validate.IsAny, nil
                }

From 91277c1649fdf97fd888d3fc9465330226292280 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 24 Nov 2020 16:47:29 +0000
Subject: [PATCH 4/8] shared/instance: Adds InstanceIncludeWhenCopying function

Brings together the volatile inclusion/exclusion logic that was spread over lxd 
and lxc.

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

diff --git a/shared/instance.go b/shared/instance.go
index 000825c247..c1f1483776 100644
--- a/shared/instance.go
+++ b/shared/instance.go
@@ -355,3 +355,21 @@ func InstanceGetParentAndSnapshotName(name string) 
(string, string, bool) {
 
        return fields[0], fields[1], true
 }
+
+// InstanceIncludeWhenCopying is used to decide whether to include a config 
item or not when copying an instance.
+// The remoteCopy argument indicates if the copy is remote (i.e between LXD 
nodes) as this affects the keys kept.
+func InstanceIncludeWhenCopying(configKey string, remoteCopy bool) bool {
+       if configKey == "volatile.base_image" {
+               return true // Include volatile.base_image always as it can 
help optimize copies.
+       }
+
+       if configKey == "volatile.last_state.idmap" && !remoteCopy {
+               return true // Include volatile.last_state.idmap when doing 
local copy to avoid needless remapping.
+       }
+
+       if strings.HasPrefix(configKey, ConfigVolatilePrefix) {
+               return false // Exclude all other volatile keys.
+       }
+
+       return true // Keep all other keys.
+}

From 76dcd882dd1bef3bb9713bd223f76630b24a2ba1 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 24 Nov 2020 16:48:13 +0000
Subject: [PATCH 5/8] lxd/copy: shared.InstanceIncludeWhenCopying usage in
 copyInstance

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxc/copy.go | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/lxc/copy.go b/lxc/copy.go
index 7b88270ee4..128c52230b 100644
--- a/lxc/copy.go
+++ b/lxc/copy.go
@@ -224,13 +224,8 @@ func (c *cmdCopy) copyInstance(conf *config.Config, 
sourceResource string, destR
                        delete(entry.Config, "volatile.last_state.power")
 
                        if !keepVolatile {
-                               // Strip all volatile keys
                                for k := range entry.Config {
-                                       if k == "volatile.base_image" {
-                                               continue
-                                       }
-
-                                       if strings.HasPrefix(k, "volatile") {
+                                       if 
!shared.InstanceIncludeWhenCopying(k, true) {
                                                delete(entry.Config, k)
                                        }
                                }
@@ -319,11 +314,7 @@ func (c *cmdCopy) copyInstance(conf *config.Config, 
sourceResource string, destR
                // Strip the volatile keys if requested
                if !keepVolatile {
                        for k := range entry.Config {
-                               if k == "volatile.base_image" {
-                                       continue
-                               }
-
-                               if strings.HasPrefix(k, "volatile") {
+                               if !shared.InstanceIncludeWhenCopying(k, true) {
                                        delete(entry.Config, k)
                                }
                        }

From fd15eb80b127ccc6ba6308872e7931eab98bcf49 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 24 Nov 2020 16:48:25 +0000
Subject: [PATCH 6/8] lxc: shared.ConfigVolatilePrefix usage

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

diff --git a/lxc/list_test.go b/lxc/list_test.go
index 5bb084e044..9bb986961b 100644
--- a/lxc/list_test.go
+++ b/lxc/list_test.go
@@ -97,11 +97,11 @@ func TestColumns(t *testing.T) {
                        randString(buffer)
                case 3:
                        if rand.Intn(2) == 0 {
-                               buffer.WriteString("volatile.")
+                               buffer.WriteString(shared.ConfigVolatilePrefix)
                                randString(buffer)
                                buffer.WriteString(".hwaddr")
                        } else {
-                               buffer.WriteString("volatile.")
+                               buffer.WriteString(shared.ConfigVolatilePrefix)
                                randString(buffer)
                                buffer.WriteString(".name")
                        }

From ecbb32591a01af930bf93fa85011a65d6cb8b469 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 24 Nov 2020 16:48:42 +0000
Subject: [PATCH 7/8] lxd: shared.ConfigVolatilePrefix usage

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/api_cluster.go                    | 4 ++--
 lxd/instance/drivers/driver_common.go | 2 +-
 lxd/instance/drivers/driver_lxc.go    | 2 +-
 lxd/instance/instance_utils.go        | 2 +-
 lxd/project/permissions.go            | 2 +-
 5 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/lxd/api_cluster.go b/lxd/api_cluster.go
index 7e88bcce2f..4261f90ae2 100644
--- a/lxd/api_cluster.go
+++ b/lxd/api_cluster.go
@@ -144,7 +144,7 @@ func clusterGetMemberConfig(cluster *db.Cluster) 
([]api.ClusterMemberConfigKey,
 
        for pool, config := range pools {
                for key := range config {
-                       if strings.HasPrefix(key, "volatile.") {
+                       if strings.HasPrefix(key, shared.ConfigVolatilePrefix) {
                                continue
                        }
 
@@ -160,7 +160,7 @@ func clusterGetMemberConfig(cluster *db.Cluster) 
([]api.ClusterMemberConfigKey,
 
        for network, config := range networks {
                for key := range config {
-                       if strings.HasPrefix(key, "volatile.") {
+                       if strings.HasPrefix(key, shared.ConfigVolatilePrefix) {
                                continue
                        }
 
diff --git a/lxd/instance/drivers/driver_common.go 
b/lxd/instance/drivers/driver_common.go
index 161cb1416a..395a200cf7 100644
--- a/lxd/instance/drivers/driver_common.go
+++ b/lxd/instance/drivers/driver_common.go
@@ -236,7 +236,7 @@ func (d *common) Snapshots() ([]instance.Instance, error) {
 func (d *common) VolatileSet(changes map[string]string) error {
        // Sanity check.
        for key := range changes {
-               if !strings.HasPrefix(key, "volatile.") {
+               if !strings.HasPrefix(key, shared.ConfigVolatilePrefix) {
                        return fmt.Errorf("Only volatile keys can be modified 
with VolatileSet")
                }
        }
diff --git a/lxd/instance/drivers/driver_lxc.go 
b/lxd/instance/drivers/driver_lxc.go
index e731beba16..ab7eeba24c 100644
--- a/lxd/instance/drivers/driver_lxc.go
+++ b/lxd/instance/drivers/driver_lxc.go
@@ -6058,7 +6058,7 @@ func (d *lxc) FillNetworkDevice(name string, m 
deviceConfig.Device) (deviceConfi
 
                // Include all currently allocated interface names
                for k, v := range d.expandedConfig {
-                       if !strings.HasPrefix(k, "volatile.") {
+                       if !strings.HasPrefix(k, shared.ConfigVolatilePrefix) {
                                continue
                        }
 
diff --git a/lxd/instance/instance_utils.go b/lxd/instance/instance_utils.go
index 589ab7b567..3ea6b4d6ae 100644
--- a/lxd/instance/instance_utils.go
+++ b/lxd/instance/instance_utils.go
@@ -127,7 +127,7 @@ func ValidConfig(sysOS *sys.OS, config map[string]string, 
profile bool, expanded
        }
 
        for k, v := range config {
-               if profile && strings.HasPrefix(k, "volatile.") {
+               if profile && strings.HasPrefix(k, shared.ConfigVolatilePrefix) 
{
                        return fmt.Errorf("Volatile keys can only be set on 
instances")
                }
 
diff --git a/lxd/project/permissions.go b/lxd/project/permissions.go
index 3950396bb6..cc3ba5d5b4 100644
--- a/lxd/project/permissions.go
+++ b/lxd/project/permissions.go
@@ -125,7 +125,7 @@ func checkRestrictionsOnVolatileConfig(project 
*api.Project, instanceType instan
        }
 
        for key, value := range config {
-               if !strings.HasPrefix(key, "volatile.") {
+               if !strings.HasPrefix(key, shared.ConfigVolatilePrefix) {
                        continue
                }
 

From f98ed83b30211bce54ebcc23f233c406e4c1b115 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 24 Nov 2020 16:49:08 +0000
Subject: [PATCH 8/8] lxd/instances/post: shared.InstanceIncludeWhenCopying
 usage in createFromCopy

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

diff --git a/lxd/instances_post.go b/lxd/instances_post.go
index 3a7028a1de..369f44230b 100644
--- a/lxd/instances_post.go
+++ b/lxd/instances_post.go
@@ -438,9 +438,8 @@ func createFromCopy(d *Daemon, project string, req 
*api.InstancesPost) response.
        }
 
        for key, value := range sourceConfig {
-               if len(key) > 8 && key[0:8] == "volatile" && 
!shared.StringInSlice(key[9:], []string{"base_image", "last_state.idmap"}) {
-                       logger.Debug("Skipping volatile key from copy source",
-                               log.Ctx{"key": key})
+               if !shared.InstanceIncludeWhenCopying(key, false) {
+                       logger.Debug("Skipping key from copy source", 
log.Ctx{"key": key, "sourceProject": source.Project(), "sourceInstance": 
source.Name(), "project": targetProject, "instance": req.Name})
                        continue
                }
 
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to