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.
This is the second version of this patch series. Various things were improved, but the biggest difference is that this version includes filesystem information. 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 | 482 ++++++++++++++++++++++- 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, 1494 insertions(+), 35 deletions(-) -- 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list