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