[libvirt] [PATCH v2 0/9] Add virDomainGetGuestInfo()

Jonathon Jongsma posted 9 patches 4 years, 8 months ago
Test syntax-check passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20190821221559.25078-1-jjongsma@redhat.com
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(-)
[libvirt] [PATCH v2 0/9] Add virDomainGetGuestInfo()
Posted by Jonathon Jongsma 4 years, 8 months ago
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