[libvirt] [PATCH 5/5] virsh: expose virDomainGetFSInfo

John Ferlan jferlan at redhat.com
Thu Oct 23 13:36:35 UTC 2014



On 09/30/2014 08:20 PM, Tomoki Sekiyama wrote:
> Add a "domfsinfo" command that shows a list of filesystems info mounted in
> the guest.
> 

Perhaps a small example of the command being run and expected output
would be nice.

> Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama at hds.com>
> ---
>  tools/virsh-domain.c |   70 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 70 insertions(+)
> 

You'll need to modify virsh.pod (e.g. man page) in order to complete
this work.  Be sure to note that the guest agent is required - there are
examples within other commands.

> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index ce59406..cc07bc3 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -11999,6 +11999,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;
> +    virDomainFSInfoPtr *info;
> +    char **alias;
> +
> +    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
> +        return false;
> +
> +    ret = virDomainGetFSInfo(dom, &info, 0);
> +    if (ret < 0) {
> +        vshError(ctl, _("Unable to get filesystems information"));

s/get filesystems /get domain filesystem /

> +        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]->type);
> +            alias = info[i]->devAlias;
> +            if (alias) {
> +                while (*alias) {
> +                    vshPrintExtra(ctl, "%s", *alias++);
> +                    if (*alias)
> +                        vshPrint(ctl, ",");

Theoretically speaking this could be very wide...  You may want to
consider some sort of verbose option which would print all aliases
beyond the first alias found.  Not sure of the best way to handle this
though and whether there are "other" examples.

John

> +                }
> +            }
> +            vshPrint(ctl, "\n");
> +
> +            virDomainFSInfoFree(info[i]);
> +        }
> +        VIR_FREE(info);
> +    }
> +
> + cleanup:
> +    virDomainFree(dom);
> +    return ret >= 0;
> +}
> +
>  const vshCmdDef domManagementCmds[] = {
>      {.name = "attach-device",
>       .handler = cmdAttachDevice,
> @@ -12158,6 +12222,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,
> 
> --
> 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