diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2008-11-21 12:39:48 +0000 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2008-11-21 12:39:48 +0000 |
commit | 1ee5367c19c41262edfd4bd187311d4aef1165d6 (patch) | |
tree | 3ea7793ec0123c61f9408da2d6c8574fdd6c57ff | |
parent | Remote protocol support for node devices (David Lively) (diff) | |
download | libvirt-1ee5367c19c41262edfd4bd187311d4aef1165d6.tar.gz libvirt-1ee5367c19c41262edfd4bd187311d4aef1165d6.tar.bz2 libvirt-1ee5367c19c41262edfd4bd187311d4aef1165d6.zip |
Node device support in virsh (David Lively)
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | src/virsh.c | 91 |
2 files changed, 96 insertions, 0 deletions
@@ -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}, |