[lxc-devel] [lxd/master] Storage: Fixes forwarded response if volume is remote to support projects
tomponline on Github
lxc-bot at linuxcontainers.org
Thu Oct 22 08:17:44 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 383 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20201022/b1ad49bb/attachment.bin>
-------------- next part --------------
From d520357207a0bb535f78212b25372aaf6478c9c5 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Thu, 22 Oct 2020 09:15:04 +0100
Subject: [PATCH 1/4] lxd/cluster/connect: Renames project arg to projectName
in ConnectIfInstanceIsRemote
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/cluster/connect.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lxd/cluster/connect.go b/lxd/cluster/connect.go
index 7ed1dd0773..a180d796f8 100644
--- a/lxd/cluster/connect.go
+++ b/lxd/cluster/connect.go
@@ -97,11 +97,11 @@ func Connect(address string, cert *shared.CertInfo, notify bool) (lxd.InstanceSe
// running the container with the given name. If it's not the local node will
// connect to it and return the connected client, otherwise it will just return
// nil.
-func ConnectIfInstanceIsRemote(cluster *db.Cluster, project, name string, cert *shared.CertInfo, instanceType instancetype.Type) (lxd.InstanceServer, error) {
+func ConnectIfInstanceIsRemote(cluster *db.Cluster, projectName string, name string, cert *shared.CertInfo, instanceType instancetype.Type) (lxd.InstanceServer, error) {
var address string // Node address
err := cluster.Transaction(func(tx *db.ClusterTx) error {
var err error
- address, err = tx.GetNodeAddressOfInstance(project, name, instanceType)
+ address, err = tx.GetNodeAddressOfInstance(projectName, name, instanceType)
return err
})
if err != nil {
From a5a1f424b9cdba09d91fd86532cdde51d896b253 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Thu, 22 Oct 2020 09:15:21 +0100
Subject: [PATCH 2/4] lxd/cluster/connect: Adds projectName arg to
ConnectIfVolumeIsRemote
Rather than being hardcoded to "default" project.
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/cluster/connect.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lxd/cluster/connect.go b/lxd/cluster/connect.go
index a180d796f8..1d93cef6bf 100644
--- a/lxd/cluster/connect.go
+++ b/lxd/cluster/connect.go
@@ -121,11 +121,11 @@ func ConnectIfInstanceIsRemote(cluster *db.Cluster, projectName string, name str
//
// If there is more than one node with a matching volume name, an error is
// returned.
-func ConnectIfVolumeIsRemote(cluster *db.Cluster, poolID int64, volumeName string, volumeType int, cert *shared.CertInfo) (lxd.InstanceServer, error) {
+func ConnectIfVolumeIsRemote(cluster *db.Cluster, poolID int64, projectName string, volumeName string, volumeType int, cert *shared.CertInfo) (lxd.InstanceServer, error) {
var addresses []string // Node addresses
err := cluster.Transaction(func(tx *db.ClusterTx) error {
var err error
- addresses, err = tx.GetStorageVolumeNodeAddresses(poolID, "default", volumeName, volumeType)
+ addresses, err = tx.GetStorageVolumeNodeAddresses(poolID, projectName, volumeName, volumeType)
return err
})
if err != nil {
From 845d371084edd548435fb26bc8cfa293b8b06705 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Thu, 22 Oct 2020 09:15:54 +0100
Subject: [PATCH 3/4] lxd/response: Adds projectName argument to
forwardedResponseIfVolumeIsRemote
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/response.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lxd/response.go b/lxd/response.go
index 01c3c9c605..77557643cb 100644
--- a/lxd/response.go
+++ b/lxd/response.go
@@ -59,13 +59,13 @@ func forwardedResponseIfInstanceIsRemote(d *Daemon, r *http.Request, project, na
//
// This is used when no targetNode is specified, and saves users some typing
// when the volume name/type is unique to a node.
-func forwardedResponseIfVolumeIsRemote(d *Daemon, r *http.Request, poolID int64, volumeName string, volumeType int) response.Response {
+func forwardedResponseIfVolumeIsRemote(d *Daemon, r *http.Request, poolID int64, projectName string, volumeName string, volumeType int) response.Response {
if queryParam(r, "target") != "" {
return nil
}
cert := d.endpoints.NetworkCert()
- client, err := cluster.ConnectIfVolumeIsRemote(d.cluster, poolID, volumeName, volumeType, cert)
+ client, err := cluster.ConnectIfVolumeIsRemote(d.cluster, poolID, projectName, volumeName, volumeType, cert)
if err != nil && err != db.ErrNoSuchObject {
return response.SmartError(err)
}
From ca3badc5dc32930ab754615b4eae6763b2f6149b Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Thu, 22 Oct 2020 09:16:19 +0100
Subject: [PATCH 4/4] lxd/storage/volumes: forwardedResponseIfVolumeIsRemote
projectName argument usage
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/storage_volumes.go | 10 +++++-----
lxd/storage_volumes_backup.go | 12 ++++++------
lxd/storage_volumes_snapshot.go | 10 +++++-----
3 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/lxd/storage_volumes.go b/lxd/storage_volumes.go
index a7c0f6c4ca..e823b181cd 100644
--- a/lxd/storage_volumes.go
+++ b/lxd/storage_volumes.go
@@ -634,7 +634,7 @@ func storagePoolVolumeTypePost(d *Daemon, r *http.Request, volumeTypeName string
return response.BadRequest(err)
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, volumeType)
if resp != nil {
return resp
}
@@ -857,7 +857,7 @@ func storagePoolVolumeTypeGet(d *Daemon, r *http.Request, volumeTypeName string)
return resp
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, volumeType)
if resp != nil {
return resp
}
@@ -936,7 +936,7 @@ func storagePoolVolumeTypePut(d *Daemon, r *http.Request, volumeTypeName string)
return resp
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, pool.ID(), volumeName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, pool.ID(), projectName, volumeName, volumeType)
if resp != nil {
return resp
}
@@ -1078,7 +1078,7 @@ func storagePoolVolumeTypePatch(d *Daemon, r *http.Request, volumeTypeName strin
return resp
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, pool.ID(), volumeName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, pool.ID(), projectName, volumeName, volumeType)
if resp != nil {
return resp
}
@@ -1176,7 +1176,7 @@ func storagePoolVolumeTypeDelete(d *Daemon, r *http.Request, volumeTypeName stri
return response.SmartError(err)
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, volumeType)
if resp != nil {
return resp
}
diff --git a/lxd/storage_volumes_backup.go b/lxd/storage_volumes_backup.go
index 2979481bbe..2b85e6f6b8 100644
--- a/lxd/storage_volumes_backup.go
+++ b/lxd/storage_volumes_backup.go
@@ -72,7 +72,7 @@ func storagePoolVolumeTypeCustomBackupsGet(d *Daemon, r *http.Request) response.
}
// Handle requests targeted to a volume on a different node
- resp := forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, db.StoragePoolVolumeTypeCustom)
+ resp := forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, db.StoragePoolVolumeTypeCustom)
if resp != nil {
return resp
}
@@ -145,7 +145,7 @@ func storagePoolVolumeTypeCustomBackupsPost(d *Daemon, r *http.Request) response
return response.SmartError(err)
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, db.StoragePoolVolumeTypeCustom)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, db.StoragePoolVolumeTypeCustom)
if resp != nil {
return resp
}
@@ -287,7 +287,7 @@ func storagePoolVolumeTypeCustomBackupGet(d *Daemon, r *http.Request) response.R
return response.SmartError(err)
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, db.StoragePoolVolumeTypeCustom)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, db.StoragePoolVolumeTypeCustom)
if resp != nil {
return resp
}
@@ -338,7 +338,7 @@ func storagePoolVolumeTypeCustomBackupPost(d *Daemon, r *http.Request) response.
return response.SmartError(err)
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, db.StoragePoolVolumeTypeCustom)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, db.StoragePoolVolumeTypeCustom)
if resp != nil {
return resp
}
@@ -420,7 +420,7 @@ func storagePoolVolumeTypeCustomBackupDelete(d *Daemon, r *http.Request) respons
return response.SmartError(err)
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, db.StoragePoolVolumeTypeCustom)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, db.StoragePoolVolumeTypeCustom)
if resp != nil {
return resp
}
@@ -489,7 +489,7 @@ func storagePoolVolumeTypeCustomBackupExportGet(d *Daemon, r *http.Request) resp
return response.SmartError(err)
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, db.StoragePoolVolumeTypeCustom)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, db.StoragePoolVolumeTypeCustom)
if resp != nil {
return resp
}
diff --git a/lxd/storage_volumes_snapshot.go b/lxd/storage_volumes_snapshot.go
index 9878c0d822..d766a8f7db 100644
--- a/lxd/storage_volumes_snapshot.go
+++ b/lxd/storage_volumes_snapshot.go
@@ -114,7 +114,7 @@ func storagePoolVolumeSnapshotsTypePost(d *Daemon, r *http.Request) response.Res
return resp
}
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, volumeName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, volumeName, volumeType)
if resp != nil {
return resp
}
@@ -302,7 +302,7 @@ func storagePoolVolumeSnapshotTypePost(d *Daemon, r *http.Request) response.Resp
}
fullSnapshotName := fmt.Sprintf("%s/%s", volumeName, snapshotName)
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, fullSnapshotName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, fullSnapshotName, volumeType)
if resp != nil {
return resp
}
@@ -368,7 +368,7 @@ func storagePoolVolumeSnapshotTypeGet(d *Daemon, r *http.Request) response.Respo
}
fullSnapshotName := fmt.Sprintf("%s/%s", volumeName, snapshotName)
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, fullSnapshotName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, fullSnapshotName, volumeType)
if resp != nil {
return resp
}
@@ -437,7 +437,7 @@ func storagePoolVolumeSnapshotTypePut(d *Daemon, r *http.Request) response.Respo
}
fullSnapshotName := fmt.Sprintf("%s/%s", volumeName, snapshotName)
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, fullSnapshotName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, fullSnapshotName, volumeType)
if resp != nil {
return resp
}
@@ -533,7 +533,7 @@ func storagePoolVolumeSnapshotTypeDelete(d *Daemon, r *http.Request) response.Re
}
fullSnapshotName := fmt.Sprintf("%s/%s", volumeName, snapshotName)
- resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, fullSnapshotName, volumeType)
+ resp = forwardedResponseIfVolumeIsRemote(d, r, poolID, projectName, fullSnapshotName, volumeType)
if resp != nil {
return resp
}
More information about the lxc-devel
mailing list