[libvirt] [PATCH v3 0/9] add virDomainGetGuestInfo()

Daniel Henrique Barboza danielhb413 at gmail.com
Fri Aug 23 21:11:12 UTC 2019


Tested the patch series with a ppc64 guest, using upstream QEMU
in a Power8 host:

$ sudo ./run tools/virsh guestinfo qga-test
user.count          : 1
user.0.name         : danielhb
user.0.login-time   : 1566588366375
os.id               : ubuntu
os.name             : Ubuntu
os.pretty-name      : Ubuntu 18.04.1 LTS
os.version          : 18.04.1 LTS (Bionic Beaver)
os.version-id       : 18.04
os.machine          : ppc64le
os.kernel-release   : 4.15.0-29-generic
os.kernel-version   : #31-Ubuntu SMP Tue Jul 17 15:37:15 UTC 2018
timezone.name       : CDT
timezone.offset     : -18000
hostname            : ubuntu1804
fs.count            : 1
fs.0.name           : vda2
fs.0.mountpoint     : /
fs.0.fstype         : ext4
fs.0.disk.count     : 1
fs.0.disk.0.alias   : vda


Looks good to me.



Thanks,


DHB


On 8/23/19 1:31 PM, Jonathon Jongsma wrote:
> changes in v3:
> - fixed test failure
> - fixed syntax issues that I had missed since I forgot to install cppi on my
>    new laptop
>
> This series adds several bits of guest information provided by a new API
> function virDomainGetGuestInfo(). There is an implementation for qemu using the
> guest agent. In particular, it adds information about logged-in users, guest
> OS, timezone, hostname, and filesystem info.
>
> Filesystem information is already accessible via the public API
> virDomainGetFSInfo(), but recent versions of the qemu guest agent added
> additional information, and the existing public API is not able to be extended
> without breaking API since it returns a C struct. This new API uses typed
> parameters so that it can be extended as necessary when new fields are added.
>
> The overall API follows the bulk stats API quite closely, and tries to return
> data in similar ways (for example, the "users.N.*" field name scheme was
> inspired by various stats fields).
>
> It should be noted that like version 1 of this patch series, the API still only
> operates on a single domain, not a list of domains. I'm willing to consider
> changing the API to operate on a list of domains if that is the concensus, but
> I lean toward keeping it simpler.
>
> Here's an example of the output of the virsh command added in this patch
> operating on a fedora 30 guest:
> virsh # guestinfo fedora30
> user.count          : 1
> user.0.name         : test
> user.0.login-time   : 1566422940895
> os.id               : fedora
> os.name             : Fedora
> os.pretty-name      : Fedora 30 (Workstation Edition)
> os.version          : 30 (Workstation Edition)
> os.version-id       : 30
> os.machine          : x86_64
> os.variant          : Workstation Edition
> os.variant-id       : workstation
> os.kernel-release   : 5.2.7-200.fc30.x86_64
> os.kernel-version   : #1 SMP Thu Aug 8 05:35:29 UTC 2019
> timezone.name       : CDT
> timezone.offset     : -18000
> hostname            : myhostname
> fs.count            : 3
> fs.0.name           : dm-0
> fs.0.mountpoint     : /
> fs.0.fstype         : ext4
> fs.0.total-bytes    : 25928306688
> fs.0.used-bytes     : 10762133504
> fs.0.disk.count     : 1
> fs.0.disk.0.alias   : vda
> fs.0.disk.0.serial  : 947684ABZ8639Q
> fs.0.disk.0.device  : /dev/vda2
> fs.1.name           : vda1
> fs.1.mountpoint     : /boot
> fs.1.fstype         : ext4
> fs.1.total-bytes    : 952840192
> fs.1.used-bytes     : 229019648
> fs.1.disk.count     : 1
> fs.1.disk.0.alias   : vda
> fs.1.disk.0.serial  : 947684ABZ8639Q
> fs.1.disk.0.device  : /dev/vda1
> fs.2.name           : md127
> fs.2.mountpoint     : /run/media/test/971b1edc-da61-4015-b465-560a9b1b6e9b
> fs.2.fstype         : ext4
> fs.2.total-bytes    : 1950134272
> fs.2.used-bytes     : 6291456
> fs.2.disk.count     : 2
> fs.2.disk.0.alias   : vdb
> fs.2.disk.0.device  : /dev/vdb1
> fs.2.disk.1.alias   : vdc
> fs.2.disk.1.device  : /dev/vdc1
>
> In contrast, here is the output of the virsh command operating on a fedora24
> guest:
> virsh # guestinfo  fedora24
> error: Reconnected to the hypervisor
> fs.count            : 2
> fs.0.name           : dm-0
> fs.0.mountpoint     : /
> fs.0.fstype         : ext4
> fs.0.disk.count     : 1
> fs.0.disk.0.alias   : vda
> fs.1.name           : vda1
> fs.1.mountpoint     : /boot
> fs.1.fstype         : ext4
> fs.1.disk.count     : 1
> fs.1.disk.0.alias   : vda
>
> However, if you specifically request an info category that is not supported by
> the guest agent:
> virsh # guestinfo --user fedora24
> error: internal error: unable to execute QEMU agent command 'guest-get-users': The command guest-get-users has not been found
>
>
>
> Jonathon Jongsma (9):
>    lib: add virDomainGetGuestInfo()
>    remote: implement virDomainGetGuestInfo
>    qemu: add helper for getting guest users
>    qemu: add helper function for querying OS info
>    qemu: add helper for querying timezone info
>    qemu: add support for new fields in FSInfo
>    qemu: add helper for getting full FSInfo
>    qemu: Implement virDomainGetGuestInfo()
>    virsh: add 'guestinfo' command
>
>   include/libvirt/libvirt-domain.h    |  14 +
>   src/driver-hypervisor.h             |   8 +
>   src/libvirt-domain.c                | 117 ++++++
>   src/libvirt_public.syms             |   1 +
>   src/qemu/qemu_agent.c               | 483 ++++++++++++++++++++++-
>   src/qemu/qemu_agent.h               |   9 +
>   src/qemu/qemu_driver.c              | 110 ++++++
>   src/remote/remote_daemon_dispatch.c |  41 ++
>   src/remote/remote_driver.c          |  53 +++
>   src/remote/remote_protocol.x        |  21 +-
>   src/remote_protocol-structs         |  12 +
>   tests/qemuagenttest.c               | 576 +++++++++++++++++++++++++++-
>   tools/virsh-domain.c                |  85 ++++
>   13 files changed, 1495 insertions(+), 35 deletions(-)
>




More information about the libvir-list mailing list