virsh: allow both --table and --uuid at the same time

This will allow to print full domains info:

   Id   Name   State   UUID
  ---------------------------

Signed-off-by: Nikolai Barybin <nikolai.barybin@virtuozzo.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Nikolai Barybin via Devel 2024-08-14 14:30:02 +03:00 committed by Michal Privoznik
parent b1524a3efc
commit 271940223c
2 changed files with 40 additions and 11 deletions

View File

@ -648,7 +648,7 @@ list
list [--inactive | --all] list [--inactive | --all]
[--managed-save] [--title] [--managed-save] [--title]
{ [--table] | --name | --uuid | --id } { [--table] | --name | --id } [--uuid]
[--persistent] [--transient] [--persistent] [--transient]
[--with-managed-save] [--without-managed-save] [--with-managed-save] [--without-managed-save]
[--autostart] [--no-autostart] [--autostart] [--no-autostart]
@ -791,12 +791,12 @@ are printed instead of names. If *--id* is specified then domain's ID's
are printed indead of names. However, it is possible to combine are printed indead of names. However, it is possible to combine
*--name*, *--uuid* and *--id* to select only desired fields for *--name*, *--uuid* and *--id* to select only desired fields for
printing. Flag *--table* specifies that the legacy table-formatted printing. Flag *--table* specifies that the legacy table-formatted
output should be used, but it is mutually exclusive with *--name*, output should be used, but it is mutually exclusive with *--name*, and *--id*.
*--uuid* and *--id*. This is the default and will be used if neither of This is the default and will be used if neither of *--name*, *--uuid* or *--id*
*--name*, *--uuid* or *--id* is specified. If neither *--name* nor *--uuid* is is specified. If neither *--name* nor *--uuid* is specified, but *--id* is,
specified, but *--id* is, then only active domains are listed, even with the then only active domains are listed, even with the *--all* parameter as otherwise
*--all* parameter as otherwise the output would just contain bunch of lines the output would just contain bunch of lines with just *-1*. If *--table* is
with just *-1*. combined with *--uuid*, then domain uuid is printed as an extra column.
If *--title* is specified, then the short domain description (title) is If *--title* is specified, then the short domain description (title) is
printed in an extra column. This flag is usable only with the default printed in an extra column. This flag is usable only with the default

View File

@ -1855,10 +1855,9 @@ cmdList(vshControl *ctl, const vshCmd *cmd)
FILTER("state-other", VIR_CONNECT_LIST_DOMAINS_OTHER); FILTER("state-other", VIR_CONNECT_LIST_DOMAINS_OTHER);
VSH_EXCLUSIVE_OPTIONS("table", "name"); VSH_EXCLUSIVE_OPTIONS("table", "name");
VSH_EXCLUSIVE_OPTIONS("table", "uuid");
VSH_EXCLUSIVE_OPTIONS("table", "id"); VSH_EXCLUSIVE_OPTIONS("table", "id");
if (!optUUID && !optName && !optID) if (!optName && !optID)
optTable = true; optTable = true;
if (!(list = virshDomainListCollect(ctl, flags))) if (!(list = virshDomainListCollect(ctl, flags)))
@ -1866,8 +1865,12 @@ cmdList(vshControl *ctl, const vshCmd *cmd)
/* print table header in legacy mode */ /* print table header in legacy mode */
if (optTable) { if (optTable) {
if (optTitle) if (optTitle && !optUUID)
table = vshTableNew(_("Id"), _("Name"), _("State"), _("Title"), NULL); table = vshTableNew(_("Id"), _("Name"), _("State"), _("Title"), NULL);
else if (optUUID && !optTitle)
table = vshTableNew(_("Id"), _("Name"), _("State"), _("UUID"), NULL);
else if (optUUID && optTitle)
table = vshTableNew(_("Id"), _("Name"), _("State"), _("Title"), _("UUID"), NULL);
else else
table = vshTableNew(_("Id"), _("Name"), _("State"), NULL); table = vshTableNew(_("Id"), _("Name"), _("State"), NULL);
@ -1896,7 +1899,7 @@ cmdList(vshControl *ctl, const vshCmd *cmd)
virDomainHasManagedSaveImage(dom, 0) > 0) virDomainHasManagedSaveImage(dom, 0) > 0)
state = -2; state = -2;
if (optTitle) { if (optTitle && !optUUID) {
g_autofree char *title = NULL; g_autofree char *title = NULL;
if (!(title = virshGetDomainDescription(ctl, dom, true, 0))) if (!(title = virshGetDomainDescription(ctl, dom, true, 0)))
@ -1907,6 +1910,32 @@ cmdList(vshControl *ctl, const vshCmd *cmd)
: virshDomainStateToString(state), : virshDomainStateToString(state),
title, NULL) < 0) title, NULL) < 0)
goto cleanup; goto cleanup;
} else if (optUUID && !optTitle) {
if (virDomainGetUUIDString(dom, uuid) < 0) {
vshError(ctl, "%s", _("Failed to get domain's UUID"));
goto cleanup;
}
if (vshTableRowAppend(table, id_buf,
virDomainGetName(dom),
state == -2 ? _("saved")
: virshDomainStateToString(state),
uuid, NULL) < 0)
goto cleanup;
} else if (optUUID && optTitle) {
g_autofree char *title = NULL;
if (!(title = virshGetDomainDescription(ctl, dom, true, 0)))
goto cleanup;
if (virDomainGetUUIDString(dom, uuid) < 0) {
vshError(ctl, "%s", _("Failed to get domain's UUID"));
goto cleanup;
}
if (vshTableRowAppend(table, id_buf,
virDomainGetName(dom),
state == -2 ? _("saved")
: virshDomainStateToString(state),
title, uuid, NULL) < 0)
goto cleanup;
} else { } else {
if (vshTableRowAppend(table, id_buf, if (vshTableRowAppend(table, id_buf,
virDomainGetName(dom), virDomainGetName(dom),