virsh: expose virDomainGetFSInfo

Add a "domfsinfo" command that shows a list of filesystems info mounted in
the guest. For example:

virsh # domfsinfo vm1
Mountpoint                           Name     Type     Target
-------------------------------------------------------------------
/                                    sda1     ext4     hdc
/opt                                 dm-2     vfat     vda,vdb
/mnt/test                            sdb1     xfs      sda

Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama@hds.com>
This commit is contained in:
Tomoki Sekiyama 2014-11-21 20:27:52 -05:00 committed by John Ferlan
parent 733b56a4b9
commit fadfcd9164
2 changed files with 79 additions and 0 deletions

View File

@ -12225,6 +12225,70 @@ cmdDomFSThaw(vshControl *ctl, const vshCmd *cmd)
return ret >= 0;
}
static const vshCmdInfo info_domfsinfo[] = {
{.name = "help",
.data = N_("Get information of domain's mounted filesystems.")
},
{.name = "desc",
.data = N_("Get information of domain's mounted filesystems.")
},
{.name = NULL}
};
static const vshCmdOptDef opts_domfsinfo[] = {
{.name = "domain",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ,
.help = N_("domain name, id or uuid")
},
{.name = NULL}
};
static bool
cmdDomFSInfo(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
int ret = -1;
size_t i, j;
virDomainFSInfoPtr *info;
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return false;
ret = virDomainGetFSInfo(dom, &info, 0);
if (ret < 0) {
vshError(ctl, _("Unable to get filesystem information"));
goto cleanup;
}
if (ret == 0) {
vshError(ctl, _("No filesystems are mounted in the domain"));
goto cleanup;
}
if (info) {
vshPrintExtra(ctl, "%-36s %-8s %-8s %s\n",
_("Mountpoint"), _("Name"), _("Type"), _("Target"));
vshPrintExtra(ctl, "-------------------------------------------------------------------\n");
for (i = 0; i < ret; i++) {
vshPrintExtra(ctl, "%-36s %-8s %-8s ",
info[i]->mountpoint, info[i]->name, info[i]->fstype);
for (j = 0; j < info[i]->ndevAlias; j++) {
vshPrintExtra(ctl, "%s", info[i]->devAlias[j]);
if (j != info[i]->ndevAlias - 1)
vshPrint(ctl, ",");
}
vshPrint(ctl, "\n");
virDomainFSInfoFree(info[i]);
}
VIR_FREE(info);
}
cleanup:
virDomainFree(dom);
return ret >= 0;
}
const vshCmdDef domManagementCmds[] = {
{.name = "attach-device",
.handler = cmdAttachDevice,
@ -12384,6 +12448,12 @@ const vshCmdDef domManagementCmds[] = {
.info = info_domfsthaw,
.flags = 0
},
{.name = "domfsinfo",
.handler = cmdDomFSInfo,
.opts = opts_domfsinfo,
.info = info_domfsinfo,
.flags = 0
},
{.name = "domfstrim",
.handler = cmdDomFSTrim,
.opts = opts_domfstrim,

View File

@ -1146,6 +1146,15 @@ be selected using the B<type> parameter (e.g. "vnc", "spice", "rdp"). If
I<--include-password> is specified, the SPICE channel password will be
included in the URI.
=item B<domfsinfo> I<domain>
Show a list of mounted filesystems within the running domain. The list contains
mountpoints, names of a mounted device in the guest, filesystem types, and
unique target names used in the domain XML (<target dev='name'/>).
Note that this command requires a guest agent configured and running in the
domain's guest OS.
=item B<domfsfreeze> I<domain> [[I<--mountpoint>] B<mountpoint>...]
Freeze mounted filesystems within a running domain to prepare for consistent