[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