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

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

-- 
2.21.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 0/9] add virDomainGetGuestInfo()
Posted by Michal Privoznik 4 years, 7 months ago
On 8/23/19 6:31 PM, Jonathon Jongsma wrote:
 >

I've fixed patches 1-8 as I reviewed them. Howver, I was too lazy to fix 
9/9 so if you can fix it and send again that'd be great. Also, if you 
want, I'm raising a small issue in 8/9 that should be fixed too.

Michal

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 0/9] add virDomainGetGuestInfo()
Posted by Daniel Henrique Barboza 4 years, 7 months ago
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(-)
>

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list