mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-26 07:36:19 +00:00
133 lines
4.0 KiB
Diff
133 lines
4.0 KiB
Diff
|
From 193cc4abbb6c2fc5557d3699f86ff0103d5a21ef Mon Sep 17 00:00:00 2001
|
||
|
From: David Allan <dallan@redhat.com>
|
||
|
Date: Tue, 19 May 2009 16:47:31 -0400
|
||
|
Subject: [PATCH 8/8] Step 8 of 8 Add virsh support
|
||
|
|
||
|
---
|
||
|
src/virsh.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||
|
1 files changed, 103 insertions(+), 0 deletions(-)
|
||
|
|
||
|
diff --git a/src/virsh.c b/src/virsh.c
|
||
|
index cb32ede..ab2a2b7 100644
|
||
|
--- a/src/virsh.c
|
||
|
+++ b/src/virsh.c
|
||
|
@@ -2962,6 +2962,107 @@ cmdPoolCreate(vshControl *ctl, const vshCmd *cmd)
|
||
|
|
||
|
|
||
|
/*
|
||
|
+ * "nodedev-create" command
|
||
|
+ */
|
||
|
+static const vshCmdInfo info_node_device_create[] = {
|
||
|
+ {"help", gettext_noop("create a device defined "
|
||
|
+ "by an XML file on the node")},
|
||
|
+ {"desc", gettext_noop("Create a device on the node. Note that this "
|
||
|
+ "command creates devices on the physical host "
|
||
|
+ "that can then be assigned to a virtual machine.")},
|
||
|
+ {NULL, NULL}
|
||
|
+};
|
||
|
+
|
||
|
+static const vshCmdOptDef opts_node_device_create[] = {
|
||
|
+ {"file", VSH_OT_DATA, VSH_OFLAG_REQ,
|
||
|
+ gettext_noop("file containing an XML description of the device")},
|
||
|
+ {NULL, 0, 0, NULL}
|
||
|
+};
|
||
|
+
|
||
|
+static int
|
||
|
+cmdNodeDeviceCreate(vshControl *ctl, const vshCmd *cmd)
|
||
|
+{
|
||
|
+ virNodeDevicePtr dev = NULL;
|
||
|
+ char *from;
|
||
|
+ int found = 0;
|
||
|
+ int ret = TRUE;
|
||
|
+ char *buffer;
|
||
|
+
|
||
|
+ if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
|
||
|
+ return FALSE;
|
||
|
+
|
||
|
+ from = vshCommandOptString(cmd, "file", &found);
|
||
|
+ if (!found) {
|
||
|
+ return FALSE;
|
||
|
+ }
|
||
|
+
|
||
|
+ if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0) {
|
||
|
+ return FALSE;
|
||
|
+ }
|
||
|
+
|
||
|
+ dev = virNodeDeviceCreateXML(ctl->conn, buffer, 0);
|
||
|
+ free (buffer);
|
||
|
+
|
||
|
+ if (dev != NULL) {
|
||
|
+ vshPrint(ctl, _("Node device %s created from %s\n"),
|
||
|
+ virNodeDeviceGetName(dev), from);
|
||
|
+ } else {
|
||
|
+ vshError(ctl, FALSE, _("Failed to create node device from %s"), from);
|
||
|
+ ret = FALSE;
|
||
|
+ }
|
||
|
+
|
||
|
+ return ret;
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
+/*
|
||
|
+ * "nodedev-destroy" command
|
||
|
+ */
|
||
|
+static const vshCmdInfo info_node_device_destroy[] = {
|
||
|
+ {"help", gettext_noop("destroy a device on the node")},
|
||
|
+ {"desc", gettext_noop("Destroy a device on the node. Note that this "
|
||
|
+ "command destroys devices on the physical host ")},
|
||
|
+ {NULL, NULL}
|
||
|
+};
|
||
|
+
|
||
|
+static const vshCmdOptDef opts_node_device_destroy[] = {
|
||
|
+ {"name", VSH_OT_DATA, VSH_OFLAG_REQ,
|
||
|
+ gettext_noop("name of the device to be destroyed")},
|
||
|
+ {NULL, 0, 0, NULL}
|
||
|
+};
|
||
|
+
|
||
|
+static int
|
||
|
+cmdNodeDeviceDestroy(vshControl *ctl, const vshCmd *cmd)
|
||
|
+{
|
||
|
+ virNodeDevicePtr dev = NULL;
|
||
|
+ int ret = TRUE;
|
||
|
+ int found = 0;
|
||
|
+ char *name;
|
||
|
+
|
||
|
+ if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) {
|
||
|
+ return FALSE;
|
||
|
+ }
|
||
|
+
|
||
|
+ name = vshCommandOptString(cmd, "name", &found);
|
||
|
+ if (!found) {
|
||
|
+ return FALSE;
|
||
|
+ }
|
||
|
+
|
||
|
+ dev = virNodeDeviceLookupByName(ctl->conn, name);
|
||
|
+
|
||
|
+ if (virNodeDeviceDestroy(dev) == 0) {
|
||
|
+ vshPrint(ctl, _("Destroyed node device '%s'\n"), name);
|
||
|
+ } else {
|
||
|
+ vshError(ctl, FALSE, _("Failed to destroy node device '%s'"), name);
|
||
|
+ ret = FALSE;
|
||
|
+ }
|
||
|
+
|
||
|
+ virNodeDeviceFree(dev);
|
||
|
+ return ret;
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
+/*
|
||
|
* XML Building helper for pool-define-as and pool-create-as
|
||
|
*/
|
||
|
static const vshCmdOptDef opts_pool_X_as[] = {
|
||
|
@@ -5895,6 +5996,8 @@ static const vshCmdDef commands[] = {
|
||
|
{"nodedev-dettach", cmdNodeDeviceDettach, opts_node_device_dettach, info_node_device_dettach},
|
||
|
{"nodedev-reattach", cmdNodeDeviceReAttach, opts_node_device_reattach, info_node_device_reattach},
|
||
|
{"nodedev-reset", cmdNodeDeviceReset, opts_node_device_reset, info_node_device_reset},
|
||
|
+ {"nodedev-create", cmdNodeDeviceCreate, opts_node_device_create, info_node_device_create},
|
||
|
+ {"nodedev-destroy", cmdNodeDeviceDestroy, opts_node_device_destroy, info_node_device_destroy},
|
||
|
|
||
|
{"pool-autostart", cmdPoolAutostart, opts_pool_autostart, info_pool_autostart},
|
||
|
{"pool-build", cmdPoolBuild, opts_pool_build, info_pool_build},
|
||
|
--
|
||
|
1.6.0.6
|