[lxc-devel] [lxd/master] lxd/instances: Add /1.0/virtual-machines
stgraber on Github
lxc-bot at linuxcontainers.org
Mon Nov 18 00:36:19 UTC 2019
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 438 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20191117/8b4f2054/attachment.bin>
-------------- next part --------------
From e92870591cc0d48a8a4aa5d767d9ec970487af67 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at 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 <stgraber at 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)
More information about the lxc-devel
mailing list