[libvirt] [PATCH v2 2/2] virsh: Enhance the detailed output of domblklist for networked source
Lin Ma
lma at suse.com
Fri Sep 4 02:30:24 UTC 2015
在 2015年09月04日 04:47, John Ferlan 写道:
>
> On 09/02/2015 11:58 AM, Michal Privoznik wrote:
>> From: Lin Ma <lma at suse.com>
>>
>> Format & output more detailed information about networked source
>>
>> e.g: The output without the patch:
>> $ virsh domblklist $DOMAIN --details
>> Type Device Target Source
>> ------------------------------------------------
>> network disk vda test-pool/image
>> network disk vdb iqn.2015-08.org.example:sn01/0
>> network disk vdc /image.raw
>> network disk vdd -
>> network disk vde -
>> network disk vdf image1
>> network disk vdg test-volume/image.raw
>>
>> The output with the patch:
>> $ virsh domblklist $DOMAIN --details
>> Type Device Target Source
>> ------------------------------------------------
>> network disk vda rbd://monitor1.example.org:6321/test-pool/image
>> network disk vdb iscsi://192.168.124.200:3260/iqn.2015-08.org.example:sn01/0
>> network disk vdc http://192.168.124.200:80/image.raw
>> network disk vdd nbd+unix:///var/run/nbdsock
>> network disk vde nbd://192.168.124.200:12345
>> network disk vdf sheepdog://192.168.124.200:6000/image1
>> network disk vdg gluster://192.168.124.200/test-volume/image.raw
> Is the goal to just format in some "standard" format or to use the
> format that would be used by qemu in the command line?
The former. It's just used to make the output of network disk more clear.
> If I look at the code in qemuBuildNetworkDriveURI, it seems there's a
> provision for nbd, sheepdog, and rbd to be "different" with nbd having
> my least favorite construct to read "if (!((multiple choice ||
> constructs)))"
>
> It seems nbd can either have uri format with "://" found or a format
> such as "nbd:unix:$socket" or "nbd:$hostname:$port".
>
> It seems sheepdog doesn't have to have a $host value and thus would have
> just "sheepdog:$source-path".
>
> It seems rbd doesn't conform to any norm - good luck with that one!
>
> While I don't disagree this is better than what is currently provided, I
> worry whether all 'options' are technically correct given what we send
> to qemu or conversely what perhaps someone provided to qemu and we
> attached to (whether that's possible still currently I'm not sure).
>
> See also qemuParseNBDString, qemuParseRBDString, qemuParseGlusterString,
> etc from qemu_command.c
>
> BTW: If the goal is to just format it some consistent manner, then the
> code seems fine to me...
>
> John
>> Signed-off-by: Lin Ma <lma at suse.com>
>> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>> ---
>> tools/virsh-domain-monitor.c | 64 ++++++++++++++++++++++++++++++++++++++++----
>> 1 file changed, 59 insertions(+), 5 deletions(-)
>>
>> diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c
>> index d4e500b..6446549 100644
>> --- a/tools/virsh-domain-monitor.c
>> +++ b/tools/virsh-domain-monitor.c
>> @@ -486,10 +486,17 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
>> xmlNodePtr *disks = NULL;
>> size_t i;
>> bool details = false;
>> + virBuffer buf = VIR_BUFFER_INITIALIZER;
>> char *type = NULL;
>> char *device = NULL;
>> char *target = NULL;
>> char *source = NULL;
>> + char *protocol = NULL;
>> + char *transport = NULL;
>> + char *host_name = NULL;
>> + char *host_port = NULL;
>> + char *socket = NULL;
>> + char *name = NULL;
>>
>> if (vshCommandOptBool(cmd, "inactive"))
>> flags |= VIR_DOMAIN_XML_INACTIVE;
>> @@ -536,11 +543,45 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
>> vshError(ctl, "unable to query block list");
>> goto cleanup;
>> }
>> - source = virXPathString("string(./source/@file"
>> - "|./source/@dev"
>> - "|./source/@dir"
>> - "|./source/@name"
>> - "|./source/@volume)", ctxt);
>> + if (type && STREQ(type, "network")) {
>> + protocol = virXPathString("string(./source/@protocol)", ctxt);
>> + name = virXPathString("string(./source/@name)", ctxt);
>> + transport = virXPathString("string(./source/host/@transport)", ctxt);
>> + socket = virXPathString("string(./source/host/@socket)", ctxt);
>> + host_name = virXPathString("string(./source/host/@name)", ctxt);
>> + host_port = virXPathString("string(./source/host/@port)", ctxt);
>> +
>> + virBufferAddStr(&buf, protocol);
>> +
>> + if (transport)
>> + virBufferAsprintf(&buf, "+%s", transport);
>> + virBufferAddLit(&buf, "://");
>> + if (host_name) {
>> + virBufferAddStr(&buf, host_name);
>> + if (host_port)
>> + virBufferAsprintf(&buf, ":%s", host_port);
>> + }
>> + if (name) {
>> + if (!STRPREFIX(name, "/"))
>> + virBufferAddChar(&buf, '/');
>> + virBufferAddStr(&buf, name);
>> + } else if (socket) {
>> + if (!STRPREFIX(socket, "/"))
>> + virBufferAddChar(&buf, '/');
>> + virBufferAddStr(&buf, socket);
>> + }
>> + if (virBufferError(&buf)) {
>> + virReportOOMError();
>> + goto cleanup;
>> + }
>> + source = virBufferContentAndReset(&buf);
>> + } else {
>> + source = virXPathString("string(./source/@file"
>> + "|./source/@dev"
>> + "|./source/@dir"
>> + "|./source/@name"
>> + "|./source/@volume)", ctxt);
>> + }
>> if (details) {
>> vshPrint(ctl, "%-10s %-10s %-10s %s\n", type, device,
>> target, source ? source : "-");
>> @@ -548,6 +589,12 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
>> vshPrint(ctl, "%-10s %s\n", target, source ? source : "-");
>> }
>>
>> + VIR_FREE(name);
>> + VIR_FREE(socket);
>> + VIR_FREE(host_port);
>> + VIR_FREE(host_name);
>> + VIR_FREE(transport);
>> + VIR_FREE(protocol);
>> VIR_FREE(source);
>> VIR_FREE(target);
>> VIR_FREE(device);
>> @@ -557,10 +604,17 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
>> ret = true;
>>
>> cleanup:
>> + VIR_FREE(name);
>> + VIR_FREE(socket);
>> + VIR_FREE(host_port);
>> + VIR_FREE(host_name);
>> + VIR_FREE(transport);
>> + VIR_FREE(protocol);
>> VIR_FREE(source);
>> VIR_FREE(target);
>> VIR_FREE(device);
>> VIR_FREE(type);
>> + virBufferFreeAndReset(&buf);
>> VIR_FREE(disks);
>> xmlXPathFreeContext(ctxt);
>> xmlFreeDoc(xmldoc);
>>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
More information about the libvir-list
mailing list