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

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) ===
Not used by our own client but useful for debugging and manual
API interaction.

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
From e92870591cc0d48a8a4aa5d767d9ec970487af67 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Sun, 17 Nov 2019 19:33:56 -0500
Subject: [PATCH] lxd/instances: Add /1.0/virtual-machines
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Not used by our own client but useful for debugging and manual
API interaction.

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/container_logs.go |  18 ++++---
 lxd/containers.go     | 117 ++++++++++++++++++++++++++++--------------
 lxd/containers_get.go |   4 ++
 3 files changed, 94 insertions(+), 45 deletions(-)

diff --git a/lxd/container_logs.go b/lxd/container_logs.go
index e3f7d861fd..b8cbf5d785 100644
--- a/lxd/container_logs.go
+++ b/lxd/container_logs.go
@@ -15,18 +15,24 @@ import (
 )
 
 var instanceLogCmd = APIEndpoint{
-       Name:    "instanceLog",
-       Path:    "instances/{name}/logs/{file}",
-       Aliases: []APIEndpointAlias{{Name: "containerLog", Path: 
"containers/{name}/logs/{file}"}},
+       Name: "instanceLog",
+       Path: "instances/{name}/logs/{file}",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerLog", Path: "containers/{name}/logs/{file}"},
+               {Name: "vmLog", Path: "virtual-machines/{name}/logs/{file}"},
+       },
 
        Delete: APIEndpointAction{Handler: containerLogDelete, AccessHandler: 
AllowProjectPermission("containers", "operate-containers")},
        Get:    APIEndpointAction{Handler: containerLogGet, AccessHandler: 
AllowProjectPermission("containers", "view")},
 }
 
 var instanceLogsCmd = APIEndpoint{
-       Name:    "instanceLogs",
-       Path:    "instances/{name}/logs",
-       Aliases: []APIEndpointAlias{{Name: "containerLogs", Path: 
"containers/{name}/logs"}},
+       Name: "instanceLogs",
+       Path: "instances/{name}/logs",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerLogs", Path: "containers/{name}/logs"},
+               {Name: "vmLogs", Path: "virtual-machines/{name}/logs"},
+       },
 
        Get: APIEndpointAction{Handler: containerLogsGet, AccessHandler: 
AllowProjectPermission("containers", "view")},
 }
diff --git a/lxd/containers.go b/lxd/containers.go
index 384c0584b0..d98e4e6f47 100644
--- a/lxd/containers.go
+++ b/lxd/containers.go
@@ -17,18 +17,24 @@ import (
 )
 
 var instancesCmd = APIEndpoint{
-       Name:    "instances",
-       Path:    "instances",
-       Aliases: []APIEndpointAlias{{Name: "containers", Path: "containers"}},
+       Name: "instances",
+       Path: "instances",
+       Aliases: []APIEndpointAlias{
+               {Name: "containers", Path: "containers"},
+               {Name: "vms", Path: "virtual-machines"},
+       },
 
        Get:  APIEndpointAction{Handler: containersGet, AccessHandler: 
AllowProjectPermission("containers", "view")},
        Post: APIEndpointAction{Handler: containersPost, AccessHandler: 
AllowProjectPermission("containers", "manage-containers")},
 }
 
 var instanceCmd = APIEndpoint{
-       Name:    "instance",
-       Path:    "instances/{name}",
-       Aliases: []APIEndpointAlias{{Name: "container", Path: 
"containers/{name}"}},
+       Name: "instance",
+       Path: "instances/{name}",
+       Aliases: []APIEndpointAlias{
+               {Name: "container", Path: "containers/{name}"},
+               {Name: "vm", Path: "virtual-machines/{name}"},
+       },
 
        Get:    APIEndpointAction{Handler: containerGet, AccessHandler: 
AllowProjectPermission("containers", "view")},
        Put:    APIEndpointAction{Handler: containerPut, AccessHandler: 
AllowProjectPermission("containers", "manage-containers")},
@@ -38,18 +44,24 @@ var instanceCmd = APIEndpoint{
 }
 
 var instanceStateCmd = APIEndpoint{
-       Name:    "instanceState",
-       Path:    "instances/{name}/state",
-       Aliases: []APIEndpointAlias{{Name: "containerState", Path: 
"containers/{name}/state"}},
+       Name: "instanceState",
+       Path: "instances/{name}/state",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerState", Path: "containers/{name}/state"},
+               {Name: "vmState", Path: "virtual-machines/{name}/state"},
+       },
 
        Get: APIEndpointAction{Handler: containerState, AccessHandler: 
AllowProjectPermission("containers", "view")},
        Put: APIEndpointAction{Handler: containerStatePut, AccessHandler: 
AllowProjectPermission("containers", "operate-containers")},
 }
 
 var instanceFileCmd = APIEndpoint{
-       Name:    "instanceFile",
-       Path:    "instances/{name}/files",
-       Aliases: []APIEndpointAlias{{Name: "containerFile", Path: 
"containers/{name}/files"}},
+       Name: "instanceFile",
+       Path: "instances/{name}/files",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerFile", Path: "containers/{name}/files"},
+               {Name: "vmFile", Path: "virtual-machines/{name}/files"},
+       },
 
        Get:    APIEndpointAction{Handler: containerFileHandler, AccessHandler: 
AllowProjectPermission("containers", "operate-containers")},
        Post:   APIEndpointAction{Handler: containerFileHandler, AccessHandler: 
AllowProjectPermission("containers", "operate-containers")},
@@ -57,18 +69,24 @@ var instanceFileCmd = APIEndpoint{
 }
 
 var instanceSnapshotsCmd = APIEndpoint{
-       Name:    "instanceSnapshots",
-       Path:    "instances/{name}/snapshots",
-       Aliases: []APIEndpointAlias{{Name: "containerSnapshots", Path: 
"containers/{name}/snapshots"}},
+       Name: "instanceSnapshots",
+       Path: "instances/{name}/snapshots",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerSnapshots", Path: 
"containers/{name}/snapshots"},
+               {Name: "vmSnapshots", Path: 
"virtual-machines/{name}/snapshots"},
+       },
 
        Get:  APIEndpointAction{Handler: containerSnapshotsGet, AccessHandler: 
AllowProjectPermission("containers", "view")},
        Post: APIEndpointAction{Handler: containerSnapshotsPost, AccessHandler: 
AllowProjectPermission("containers", "operate-containers")},
 }
 
 var instanceSnapshotCmd = APIEndpoint{
-       Name:    "instanceSnapshot",
-       Path:    "instances/{name}/snapshots/{snapshotName}",
-       Aliases: []APIEndpointAlias{{Name: "containerSnapshot", Path: 
"containers/{name}/snapshots/{snapshotName}"}},
+       Name: "instanceSnapshot",
+       Path: "instances/{name}/snapshots/{snapshotName}",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerSnapshot", Path: 
"containers/{name}/snapshots/{snapshotName}"},
+               {Name: "vmSnapshot", Path: 
"virtual-machines/{name}/snapshots/{snapshotName}"},
+       },
 
        Get:    APIEndpointAction{Handler: containerSnapshotHandler, 
AccessHandler: AllowProjectPermission("containers", "operate-containers")},
        Post:   APIEndpointAction{Handler: containerSnapshotHandler, 
AccessHandler: AllowProjectPermission("containers", "operate-containers")},
@@ -77,9 +95,12 @@ var instanceSnapshotCmd = APIEndpoint{
 }
 
 var instanceConsoleCmd = APIEndpoint{
-       Name:    "instanceConsole",
-       Path:    "instances/{name}/console",
-       Aliases: []APIEndpointAlias{{Name: "containerConsole", Path: 
"containers/{name}/console"}},
+       Name: "instanceConsole",
+       Path: "instances/{name}/console",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerConsole", Path: "containers/{name}/console"},
+               {Name: "vmConsole", Path: "virtual-machines/{name}/console"},
+       },
 
        Get:    APIEndpointAction{Handler: containerConsoleLogGet, 
AccessHandler: AllowProjectPermission("containers", "view")},
        Post:   APIEndpointAction{Handler: containerConsolePost, AccessHandler: 
AllowProjectPermission("containers", "operate-containers")},
@@ -87,26 +108,35 @@ var instanceConsoleCmd = APIEndpoint{
 }
 
 var instanceExecCmd = APIEndpoint{
-       Name:    "instanceExec",
-       Path:    "instances/{name}/exec",
-       Aliases: []APIEndpointAlias{{Name: "containerExec", Path: 
"containers/{name}/exec"}},
+       Name: "instanceExec",
+       Path: "instances/{name}/exec",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerExec", Path: "containers/{name}/exec"},
+               {Name: "vmExec", Path: "virtual-machines/{name}/exec"},
+       },
 
        Post: APIEndpointAction{Handler: containerExecPost, AccessHandler: 
AllowProjectPermission("containers", "operate-containers")},
 }
 
 var instanceMetadataCmd = APIEndpoint{
-       Name:    "instanceMetadata",
-       Path:    "instances/{name}/metadata",
-       Aliases: []APIEndpointAlias{{Name: "containerMetadata", Path: 
"containers/{name}/metadata"}},
+       Name: "instanceMetadata",
+       Path: "instances/{name}/metadata",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerMetadata", Path: "containers/{name}/metadata"},
+               {Name: "vmMetadata", Path: "virtual-machines/{name}/metadata"},
+       },
 
        Get: APIEndpointAction{Handler: containerMetadataGet, AccessHandler: 
AllowProjectPermission("containers", "view")},
        Put: APIEndpointAction{Handler: containerMetadataPut, AccessHandler: 
AllowProjectPermission("containers", "manage-containers")},
 }
 
 var instanceMetadataTemplatesCmd = APIEndpoint{
-       Name:    "instanceMetadataTemplates",
-       Path:    "instances/{name}/metadata/templates",
-       Aliases: []APIEndpointAlias{{Name: "containerMetadataTemplates", Path: 
"containers/{name}/metadata/templates"}},
+       Name: "instanceMetadataTemplates",
+       Path: "instances/{name}/metadata/templates",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerMetadataTemplates", Path: 
"containers/{name}/metadata/templates"},
+               {Name: "vmMetadataTemplates", Path: 
"virtual-machines/{name}/metadata/templates"},
+       },
 
        Get:    APIEndpointAction{Handler: containerMetadataTemplatesGet, 
AccessHandler: AllowProjectPermission("containers", "view")},
        Post:   APIEndpointAction{Handler: containerMetadataTemplatesPostPut, 
AccessHandler: AllowProjectPermission("containers", "manage-containers")},
@@ -115,18 +145,24 @@ var instanceMetadataTemplatesCmd = APIEndpoint{
 }
 
 var instanceBackupsCmd = APIEndpoint{
-       Name:    "instanceBackups",
-       Path:    "instances/{name}/backups",
-       Aliases: []APIEndpointAlias{{Name: "containerBackups", Path: 
"containers/{name}/backups"}},
+       Name: "instanceBackups",
+       Path: "instances/{name}/backups",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerBackups", Path: "containers/{name}/backups"},
+               {Name: "vmBackups", Path: "virtual-machines/{name}/backups"},
+       },
 
        Get:  APIEndpointAction{Handler: containerBackupsGet, AccessHandler: 
AllowProjectPermission("containers", "view")},
        Post: APIEndpointAction{Handler: containerBackupsPost, AccessHandler: 
AllowProjectPermission("containers", "operate-containers")},
 }
 
 var instanceBackupCmd = APIEndpoint{
-       Name:    "instanceBackup",
-       Path:    "instances/{name}/backups/{backupName}",
-       Aliases: []APIEndpointAlias{{Name: "containerBackup", Path: 
"containers/{name}/backups/{backupName}"}},
+       Name: "instanceBackup",
+       Path: "instances/{name}/backups/{backupName}",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerBackup", Path: 
"containers/{name}/backups/{backupName}"},
+               {Name: "vmBackup", Path: 
"virtual-machines/{name}/backups/{backupName}"},
+       },
 
        Get:    APIEndpointAction{Handler: containerBackupGet, AccessHandler: 
AllowProjectPermission("containers", "view")},
        Post:   APIEndpointAction{Handler: containerBackupPost, AccessHandler: 
AllowProjectPermission("containers", "operate-containers")},
@@ -134,9 +170,12 @@ var instanceBackupCmd = APIEndpoint{
 }
 
 var instanceBackupExportCmd = APIEndpoint{
-       Name:    "instanceBackupExport",
-       Path:    "instances/{name}/backups/{backupName}/export",
-       Aliases: []APIEndpointAlias{{Name: "containerBackupExport", Path: 
"containers/{name}/backups/{backupName}/export"}},
+       Name: "instanceBackupExport",
+       Path: "instances/{name}/backups/{backupName}/export",
+       Aliases: []APIEndpointAlias{
+               {Name: "containerBackupExport", Path: 
"containers/{name}/backups/{backupName}/export"},
+               {Name: "vmBackupExport", Path: 
"virtual-machines/{name}/backups/{backupName}/export"},
+       },
 
        Get: APIEndpointAction{Handler: containerBackupExportGet, 
AccessHandler: AllowProjectPermission("containers", "view")},
 }
diff --git a/lxd/containers_get.go b/lxd/containers_get.go
index 499170f925..3e4dc3d2bb 100644
--- a/lxd/containers_get.go
+++ b/lxd/containers_get.go
@@ -29,6 +29,8 @@ func urlInstanceTypeDetect(r *http.Request) 
(instancetype.Type, error) {
        reqInstanceType := r.URL.Query().Get("instance-type")
        if strings.HasPrefix(mux.CurrentRoute(r).GetName(), "container") {
                return instancetype.Container, nil
+       } else if strings.HasPrefix(mux.CurrentRoute(r).GetName(), "vm") {
+               return instancetype.VM, nil
        } else if reqInstanceType != "" {
                instanceType, err := instancetype.New(reqInstanceType)
                if err != nil {
@@ -216,6 +218,8 @@ func doContainersGet(d *Daemon, r *http.Request) 
(interface{}, error) {
                                instancePath := "instances"
                                if 
strings.HasPrefix(mux.CurrentRoute(r).GetName(), "container") {
                                        instancePath = "containers"
+                               } else if 
strings.HasPrefix(mux.CurrentRoute(r).GetName(), "vm") {
+                                       instancePath = "virtual-machines"
                                }
                                url := fmt.Sprintf("/%s/%s/%s", 
version.APIVersion, instancePath, container)
                                resultString = append(resultString, url)
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to