[lxc-devel] [lxd/master] lxd/db: Automatically strip ?project=default

stgraber on Github lxc-bot at linuxcontainers.org
Sat Jun 13 03:03:07 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 354 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200612/df773b0d/attachment.bin>
-------------- next part --------------
From 7881e3348ed6be1edb53e93a1636a92b6c0ffe3d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 12 Jun 2020 18:42:25 -0400
Subject: [PATCH] lxd/db: Automatically strip ?project=default
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/db/profiles.mapper.go    | 5 +++++
 lxd/db/projects.mapper.go    | 5 +++++
 lxd/profiles.go              | 9 ---------
 shared/generate/db/method.go | 7 +++++++
 4 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/lxd/db/profiles.mapper.go b/lxd/db/profiles.mapper.go
index 71f7a2d0c0..256733abfe 100644
--- a/lxd/db/profiles.mapper.go
+++ b/lxd/db/profiles.mapper.go
@@ -278,6 +278,11 @@ func (c *ClusterTx) GetProfiles(filter ProfileFilter) ([]Profile, error) {
 		if value == nil {
 			value = []string{}
 		}
+		for j, entry := range value {
+			if len(entry) > 16 && entry[len(entry)-16:] == "?project=default" {
+				value[j] = entry[0 : len(entry)-16]
+			}
+		}
 		objects[i].UsedBy = value
 	}
 
diff --git a/lxd/db/projects.mapper.go b/lxd/db/projects.mapper.go
index 3b763721f3..01b9ef3cf5 100644
--- a/lxd/db/projects.mapper.go
+++ b/lxd/db/projects.mapper.go
@@ -177,6 +177,11 @@ func (c *ClusterTx) GetProjects(filter ProjectFilter) ([]api.Project, error) {
 		if value == nil {
 			value = []string{}
 		}
+		for j, entry := range value {
+			if len(entry) > 16 && entry[len(entry)-16:] == "?project=default" {
+				value[j] = entry[0 : len(entry)-16]
+			}
+		}
 		objects[i].UsedBy = value
 	}
 
diff --git a/lxd/profiles.go b/lxd/profiles.go
index ac449cf157..7783ecb5d2 100644
--- a/lxd/profiles.go
+++ b/lxd/profiles.go
@@ -179,15 +179,6 @@ func profileGet(d *Daemon, r *http.Request) response.Response {
 		return response.SmartError(err)
 	}
 
-	// For backward-compatibility, we strip the "?project" query parameter
-	// in case the project is the default one.
-	for i, uri := range resp.UsedBy {
-		suffix := "?project=default"
-		if strings.HasSuffix(uri, suffix) {
-			resp.UsedBy[i] = uri[:len(uri)-len(suffix)]
-		}
-	}
-
 	etag := []interface{}{resp.Config, resp.Description, resp.Devices}
 	return response.SyncResponseETag(true, resp, etag)
 }
diff --git a/shared/generate/db/method.go b/shared/generate/db/method.go
index c8667a110c..acb6048121 100644
--- a/shared/generate/db/method.go
+++ b/shared/generate/db/method.go
@@ -531,6 +531,13 @@ func (m *Method) fillSliceReferenceField(buf *file.Buffer, nk []*Field, field *F
 	buf.L("        if value == nil {")
 	buf.L("                value = %s{}", field.Type.Name)
 	buf.L("        }")
+	if field.Name == "UsedBy" {
+		buf.L("        for j, entry := range value {")
+		buf.L("                if len(entry) > 16 && entry[len(entry)-16:] == \"?project=default\" {")
+		buf.L("                         value[j] = entry[0:len(entry)-16]")
+		buf.L("                }")
+		buf.L("        }")
+	}
 	buf.L("        objects[i].%s = value", field.Name)
 	buf.L("}")
 	buf.N()


More information about the lxc-devel mailing list