summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2008-11-21 12:39:48 +0000
committerDaniel P. Berrange <berrange@redhat.com>2008-11-21 12:39:48 +0000
commit1ee5367c19c41262edfd4bd187311d4aef1165d6 (patch)
tree3ea7793ec0123c61f9408da2d6c8574fdd6c57ff
parentRemote protocol support for node devices (David Lively) (diff)
downloadlibvirt-1ee5367c19c41262edfd4bd187311d4aef1165d6.tar.gz
libvirt-1ee5367c19c41262edfd4bd187311d4aef1165d6.tar.bz2
libvirt-1ee5367c19c41262edfd4bd187311d4aef1165d6.zip
Node device support in virsh (David Lively)
-rw-r--r--ChangeLog5
-rw-r--r--src/virsh.c91
2 files changed, 96 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index cb5f9588d..9d90bec77 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Nov 21 12:38:14 BST 2008 Daniel P. Berrange <berrange@redhat.com>
+
+ Node device support in virsh (David Lively)
+ * src/virsh.c: Add nodedev-list and nodedev-dumpxml commands
+
Fri Nov 21 12:30:14 BST 2008 Daniel P. Berrange <berrange@redhat.com>
Remote protocol support for node devices (David Lively)
diff --git a/src/virsh.c b/src/virsh.c
index 419578140..193afba88 100644
--- a/src/virsh.c
+++ b/src/virsh.c
@@ -4419,6 +4419,94 @@ cmdVersion(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
}
/*
+ * "nodedev-list" command
+ */
+static const vshCmdInfo info_node_list_devices[] = {
+ {"syntax", "nodedev-list [--cap <capability>]"},
+ {"help", gettext_noop("enumerate devices on this host")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_node_list_devices[] = {
+ {"cap", VSH_OT_STRING, VSH_OFLAG_NONE, gettext_noop("capability name")},
+ {NULL, 0, 0, NULL}
+};
+
+static int
+cmdNodeListDevices (vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
+{
+ char *cap;
+ char **devices;
+ int found, num_devices, i;
+
+ if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+ return FALSE;
+
+ cap = vshCommandOptString(cmd, "cap", &found);
+ if (!found)
+ cap = NULL;
+
+ num_devices = virNodeNumOfDevices(ctl->conn, cap, 0);
+ if (num_devices < 0) {
+ vshError(ctl, FALSE, "%s", _("Failed to count node devices"));
+ return FALSE;
+ } else if (num_devices == 0) {
+ return TRUE;
+ }
+
+ devices = vshMalloc(ctl, sizeof(char *) * num_devices);
+ num_devices =
+ virNodeListDevices(ctl->conn, cap, devices, num_devices, 0);
+ if (num_devices < 0) {
+ vshError(ctl, FALSE, "%s", _("Failed to list node devices"));
+ free(devices);
+ return FALSE;
+ }
+ for (i = 0; i < num_devices; i++) {
+ vshPrint(ctl, "%s\n", devices[i]);
+ free(devices[i]);
+ }
+ free(devices);
+ return TRUE;
+}
+
+/*
+ * "nodedev-dumpxml" command
+ */
+static const vshCmdInfo info_node_device_dumpxml[] = {
+ {"syntax", "nodedev-dumpxml <device>"},
+ {"help", gettext_noop("node device details in XML")},
+ {"desc", gettext_noop("Output the node device details as an XML dump to stdout.")},
+ {NULL, NULL}
+};
+
+
+static const vshCmdOptDef opts_node_device_dumpxml[] = {
+ {"device", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("device key")},
+ {NULL, 0, 0, NULL}
+};
+
+static int
+cmdNodeDeviceDumpXML (vshControl *ctl, const vshCmd *cmd)
+{
+ const char *name;
+ virNodeDevicePtr device;
+
+ if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+ return FALSE;
+ if (!(name = vshCommandOptString(cmd, "device", NULL)))
+ return FALSE;
+ if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
+ vshError(ctl, FALSE, "%s '%s'", _("Could not find matching device"), name);
+ return FALSE;
+ }
+
+ vshPrint(ctl, "%s\n", virNodeDeviceGetXMLDesc(device, 0));
+ virNodeDeviceFree(device);
+ return TRUE;
+}
+
+/*
* "hostkey" command
*/
static const vshCmdInfo info_hostname[] = {
@@ -5570,6 +5658,9 @@ static const vshCmdDef commands[] = {
{"net-uuid", cmdNetworkUuid, opts_network_uuid, info_network_uuid},
{"nodeinfo", cmdNodeinfo, NULL, info_nodeinfo},
+ {"nodedev-list", cmdNodeListDevices, opts_node_list_devices, info_node_list_devices},
+ {"nodedev-dumpxml", cmdNodeDeviceDumpXML, opts_node_device_dumpxml, info_node_device_dumpxml},
+
{"pool-autostart", cmdPoolAutostart, opts_pool_autostart, info_pool_autostart},
{"pool-build", cmdPoolBuild, opts_pool_build, info_pool_build},
{"pool-create", cmdPoolCreate, opts_pool_create, info_pool_create},