[lxc-devel] [lxd/master] Add virtual-machine volume type to API

stgraber on Github lxc-bot at linuxcontainers.org
Sat Nov 9 01:25:34 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20191108/da700d8f/attachment.bin>
-------------- next part --------------
From 5ccc04b3d32cd7bd6e8fe47919dd24501b83a953 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 8 Nov 2019 20:24:37 -0500
Subject: [PATCH 1/2] lxc/storage: Add support for virtual-machine volumes
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>
---
 lxc/storage_volume.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxc/storage_volume.go b/lxc/storage_volume.go
index e4c94e4b18..fb2a353db7 100644
--- a/lxc/storage_volume.go
+++ b/lxc/storage_volume.go
@@ -109,7 +109,7 @@ func (c *cmdStorageVolume) parseVolume(defaultType string, name string) (string,
 	fields := strings.SplitN(name, "/", 2)
 	if len(fields) == 1 {
 		return fields[0], defaultType
-	} else if len(fields) == 2 && !shared.StringInSlice(fields[0], []string{"custom", "image", "container"}) {
+	} else if len(fields) == 2 && !shared.StringInSlice(fields[0], []string{"custom", "image", "container", "virtual-machine"}) {
 		return name, defaultType
 	}
 

From e74b3b8d8624a063b64da34ec57f777f44b6e9b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 8 Nov 2019 20:24:57 -0500
Subject: [PATCH 2/2] lxd/storage: Add support for virtual-machine volumes
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/api_1.0.go               |  1 +
 lxd/storage_volumes.go       | 34 ++++++++++++++++++++++++++++++++++
 lxd/storage_volumes_utils.go |  9 ++++++++-
 3 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/lxd/api_1.0.go b/lxd/api_1.0.go
index 8854bd86fe..cf8a7c0bca 100644
--- a/lxd/api_1.0.go
+++ b/lxd/api_1.0.go
@@ -82,6 +82,7 @@ var api10 = []APIEndpoint{
 	storagePoolVolumeTypeContainerCmd,
 	storagePoolVolumeTypeCustomCmd,
 	storagePoolVolumeTypeImageCmd,
+	storagePoolVolumeTypeVMCmd,
 }
 
 func api10Get(d *Daemon, r *http.Request) response.Response {
diff --git a/lxd/storage_volumes.go b/lxd/storage_volumes.go
index 1f7f31cea4..0e04c9b611 100644
--- a/lxd/storage_volumes.go
+++ b/lxd/storage_volumes.go
@@ -49,6 +49,16 @@ var storagePoolVolumeTypeContainerCmd = APIEndpoint{
 	Put:    APIEndpointAction{Handler: storagePoolVolumeTypeContainerPut},
 }
 
+var storagePoolVolumeTypeVMCmd = APIEndpoint{
+	Path: "storage-pools/{pool}/volumes/virtual-machine/{name:.*}",
+
+	Delete: APIEndpointAction{Handler: storagePoolVolumeTypeVMDelete},
+	Get:    APIEndpointAction{Handler: storagePoolVolumeTypeVMGet, AccessHandler: AllowAuthenticated},
+	Patch:  APIEndpointAction{Handler: storagePoolVolumeTypeVMPatch},
+	Post:   APIEndpointAction{Handler: storagePoolVolumeTypeVMPost},
+	Put:    APIEndpointAction{Handler: storagePoolVolumeTypeVMPut},
+}
+
 var storagePoolVolumeTypeCustomCmd = APIEndpoint{
 	Path: "storage-pools/{pool}/volumes/custom/{name}",
 
@@ -122,6 +132,8 @@ func storagePoolVolumesGet(d *Daemon, r *http.Request) response.Response {
 
 		if apiEndpoint == storagePoolVolumeAPIEndpointContainers {
 			apiEndpoint = "container"
+		} else if apiEndpoint == storagePoolVolumeAPIEndpointVMs {
+			apiEndpoint = "virtual-machine"
 		} else if apiEndpoint == storagePoolVolumeAPIEndpointImages {
 			apiEndpoint = "image"
 		}
@@ -202,6 +214,8 @@ func storagePoolVolumesTypeGet(d *Daemon, r *http.Request) response.Response {
 
 			if apiEndpoint == storagePoolVolumeAPIEndpointContainers {
 				apiEndpoint = "container"
+			} else if apiEndpoint == storagePoolVolumeAPIEndpointVMs {
+				apiEndpoint = "virtual-machine"
 			} else if apiEndpoint == storagePoolVolumeAPIEndpointImages {
 				apiEndpoint = "image"
 			}
@@ -786,6 +800,10 @@ func storagePoolVolumeTypeContainerPost(d *Daemon, r *http.Request) response.Res
 	return storagePoolVolumeTypePost(d, r, "container")
 }
 
+func storagePoolVolumeTypeVMPost(d *Daemon, r *http.Request) response.Response {
+	return storagePoolVolumeTypePost(d, r, "virtual-machine")
+}
+
 func storagePoolVolumeTypeCustomPost(d *Daemon, r *http.Request) response.Response {
 	return storagePoolVolumeTypePost(d, r, "custom")
 }
@@ -874,6 +892,10 @@ func storagePoolVolumeTypeContainerGet(d *Daemon, r *http.Request) response.Resp
 	return storagePoolVolumeTypeGet(d, r, "container")
 }
 
+func storagePoolVolumeTypeVMGet(d *Daemon, r *http.Request) response.Response {
+	return storagePoolVolumeTypeGet(d, r, "virtual-machine")
+}
+
 func storagePoolVolumeTypeCustomGet(d *Daemon, r *http.Request) response.Response {
 	return storagePoolVolumeTypeGet(d, r, "custom")
 }
@@ -1022,6 +1044,10 @@ func storagePoolVolumeTypeContainerPut(d *Daemon, r *http.Request) response.Resp
 	return storagePoolVolumeTypePut(d, r, "container")
 }
 
+func storagePoolVolumeTypeVMPut(d *Daemon, r *http.Request) response.Response {
+	return storagePoolVolumeTypePut(d, r, "virtual-machine")
+}
+
 func storagePoolVolumeTypeCustomPut(d *Daemon, r *http.Request) response.Response {
 	return storagePoolVolumeTypePut(d, r, "custom")
 }
@@ -1131,6 +1157,10 @@ func storagePoolVolumeTypeContainerPatch(d *Daemon, r *http.Request) response.Re
 	return storagePoolVolumeTypePatch(d, r, "container")
 }
 
+func storagePoolVolumeTypeVMPatch(d *Daemon, r *http.Request) response.Response {
+	return storagePoolVolumeTypePatch(d, r, "virtual-machine")
+}
+
 func storagePoolVolumeTypeCustomPatch(d *Daemon, r *http.Request) response.Response {
 	return storagePoolVolumeTypePatch(d, r, "custom")
 }
@@ -1268,6 +1298,10 @@ func storagePoolVolumeTypeContainerDelete(d *Daemon, r *http.Request) response.R
 	return storagePoolVolumeTypeDelete(d, r, "container")
 }
 
+func storagePoolVolumeTypeVMDelete(d *Daemon, r *http.Request) response.Response {
+	return storagePoolVolumeTypeDelete(d, r, "virtual-machine")
+}
+
 func storagePoolVolumeTypeCustomDelete(d *Daemon, r *http.Request) response.Response {
 	return storagePoolVolumeTypeDelete(d, r, "custom")
 }
diff --git a/lxd/storage_volumes_utils.go b/lxd/storage_volumes_utils.go
index ab7791e742..2774cd4b30 100644
--- a/lxd/storage_volumes_utils.go
+++ b/lxd/storage_volumes_utils.go
@@ -17,12 +17,14 @@ import (
 //      extracted to its own package. We should eventually clean this up.
 const (
 	storagePoolVolumeTypeContainer = db.StoragePoolVolumeTypeContainer
+	storagePoolVolumeTypeVM        = db.StoragePoolVolumeTypeVM
 	storagePoolVolumeTypeImage     = db.StoragePoolVolumeTypeImage
 	storagePoolVolumeTypeCustom    = db.StoragePoolVolumeTypeCustom
 )
 
 const (
 	storagePoolVolumeTypeNameContainer = db.StoragePoolVolumeTypeNameContainer
+	storagePoolVolumeTypeNameVM        = db.StoragePoolVolumeTypeNameVM
 	storagePoolVolumeTypeNameImage     = db.StoragePoolVolumeTypeNameImage
 	storagePoolVolumeTypeNameCustom    = db.StoragePoolVolumeTypeNameCustom
 )
@@ -32,11 +34,12 @@ const (
 // constants which is not what we want.
 const (
 	storagePoolVolumeAPIEndpointContainers string = "containers"
+	storagePoolVolumeAPIEndpointVMs        string = "virtual-machines"
 	storagePoolVolumeAPIEndpointImages     string = "images"
 	storagePoolVolumeAPIEndpointCustom     string = "custom"
 )
 
-var supportedVolumeTypesExceptImages = []int{storagePoolVolumeTypeContainer, storagePoolVolumeTypeCustom}
+var supportedVolumeTypesExceptImages = []int{storagePoolVolumeTypeContainer, storagePoolVolumeTypeVM, storagePoolVolumeTypeCustom}
 var supportedVolumeTypes = append(supportedVolumeTypesExceptImages, storagePoolVolumeTypeImage)
 
 func init() {
@@ -47,6 +50,8 @@ func storagePoolVolumeTypeNameToAPIEndpoint(volumeTypeName string) (string, erro
 	switch volumeTypeName {
 	case storagePoolVolumeTypeNameContainer:
 		return storagePoolVolumeAPIEndpointContainers, nil
+	case storagePoolVolumeTypeNameVM:
+		return storagePoolVolumeAPIEndpointVMs, nil
 	case storagePoolVolumeTypeNameImage:
 		return storagePoolVolumeAPIEndpointImages, nil
 	case storagePoolVolumeTypeNameCustom:
@@ -60,6 +65,8 @@ func storagePoolVolumeTypeToAPIEndpoint(volumeType int) (string, error) {
 	switch volumeType {
 	case storagePoolVolumeTypeContainer:
 		return storagePoolVolumeAPIEndpointContainers, nil
+	case storagePoolVolumeTypeVM:
+		return storagePoolVolumeAPIEndpointVMs, nil
 	case storagePoolVolumeTypeImage:
 		return storagePoolVolumeAPIEndpointImages, nil
 	case storagePoolVolumeTypeCustom:


More information about the lxc-devel mailing list