[PATCH v2] qemu: Expose disk serial in virDomainGetGuestInfo()

Michal Privoznik posted 1 patch 3 years ago
Test syntax-check failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/4112bc6f6c53f2894c0a2d93f5f31e8dff7140ab.1618393840.git.mprivozn@redhat.com
docs/manpages/virsh.rst |  1 +
src/libvirt-domain.c    |  1 +
src/qemu/qemu_driver.c  | 19 ++++++++++++++-----
3 files changed, 16 insertions(+), 5 deletions(-)
[PATCH v2] qemu: Expose disk serial in virDomainGetGuestInfo()
Posted by Michal Privoznik 3 years ago
When querying guest info via virDomainGetGuestInfo() the
'guest-get-disks' agent command is called. It may report disk
serial number which we parse, but never report nor use for
anything else.

As it turns out, it may help management application find matching
disk in their internals.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---

v2 of:

https://listman.redhat.com/archives/libvir-list/2021-April/msg00552.html

diff to v1:
- Filled virsh documentation
- Documented that the param is optional and type of string

 docs/manpages/virsh.rst |  1 +
 src/libvirt-domain.c    |  1 +
 src/qemu/qemu_driver.c  | 19 ++++++++++++++-----
 3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
index 813fb0bd60..bccda292a2 100644
--- a/docs/manpages/virsh.rst
+++ b/docs/manpages/virsh.rst
@@ -2787,6 +2787,7 @@ returned:
 * ``disk.<num>.partition`` - whether this is a partition or disk
 * ``disk.<num>.dependency.count`` - the number of device dependencies
 * ``disk.<num>.dependency.<num>.name`` - a dependency name
+* ``disk.<num>.serial`` -  optional disk serial number
 * ``disk.<num>.alias`` - the device alias of the disk (e.g. sda)
 * ``disk.<num>.guest_alias`` - optional alias assigned to the disk
 
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index 83ff7df9fe..509b7a6d88 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -12561,6 +12561,7 @@ virDomainSetVcpu(virDomainPtr domain,
  *                      hold the list of PVs, for LUKS encrypted volume this will
  *                      contain the disk where the volume is placed. (Linux)
  *      "disk.<num>.dependency.<num>.name" - a dependency
+ *      "disk.<num>.serial" - optional disk serial number (as string)
  *      "disk.<num>.alias" - the device alias of the disk (e.g. sda)
  *      "disk.<num>.guest_alias" - optional alias assigned to the disk, on Linux
  *                      this is a name assigned by device mapper
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 90b5477f00..88ee9e5d5e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -19951,15 +19951,24 @@ qemuAgentDiskInfoFormatParams(qemuAgentDiskInfo **info,
         }
 
         if (info[i]->address) {
+            qemuAgentDiskAddress *address = info[i]->address;
             virDomainDiskDef *diskdef = NULL;
 
+            if (address->serial) {
+                g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
+                           "disk.%zu.serial", i);
+                if (virTypedParamsAddString(params, nparams, maxparams,
+                                            param_name, address->serial) < 0)
+                    return;
+            }
+
             /* match the disk to the target in the vm definition */
             diskdef = virDomainDiskByAddress(vmdef,
-                                             &info[i]->address->pci_controller,
-                                             info[i]->address->ccw_addr,
-                                             info[i]->address->bus,
-                                             info[i]->address->target,
-                                             info[i]->address->unit);
+                                             &address->pci_controller,
+                                             address->ccw_addr,
+                                             address->bus,
+                                             address->target,
+                                             address->unit);
             if (diskdef) {
                 g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
                            "disk.%zu.alias", i);
-- 
2.26.3

Re: [PATCH v2] qemu: Expose disk serial in virDomainGetGuestInfo()
Posted by Tomáš Golembiovský 3 years ago
On Wed, Apr 14, 2021 at 11:51:39AM +0200, Michal Privoznik wrote:
> When querying guest info via virDomainGetGuestInfo() the
> 'guest-get-disks' agent command is called. It may report disk
> serial number which we parse, but never report nor use for
> anything else.
> 
> As it turns out, it may help management application find matching
> disk in their internals.
> 
> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
> ---
> 
> v2 of:
> 
> https://listman.redhat.com/archives/libvir-list/2021-April/msg00552.html
> 
> diff to v1:
> - Filled virsh documentation
> - Documented that the param is optional and type of string
> 
>  docs/manpages/virsh.rst |  1 +
>  src/libvirt-domain.c    |  1 +
>  src/qemu/qemu_driver.c  | 19 ++++++++++++++-----
>  3 files changed, 16 insertions(+), 5 deletions(-)
> 

Reviewed-By: Tomáš Golembiovský <tgolembi@redhat.com>

-- 
Tomáš Golembiovský <tgolembi@redhat.com>

Re: [PATCH v2] qemu: Expose disk serial in virDomainGetGuestInfo()
Posted by Peter Krempa 3 years ago
On Wed, Apr 14, 2021 at 11:51:39 +0200, Michal Privoznik wrote:
> When querying guest info via virDomainGetGuestInfo() the
> 'guest-get-disks' agent command is called. It may report disk
> serial number which we parse, but never report nor use for
> anything else.
> 
> As it turns out, it may help management application find matching
> disk in their internals.
> 
> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
> ---
> 
> v2 of:
> 
> https://listman.redhat.com/archives/libvir-list/2021-April/msg00552.html
> 
> diff to v1:
> - Filled virsh documentation
> - Documented that the param is optional and type of string
> 
>  docs/manpages/virsh.rst |  1 +
>  src/libvirt-domain.c    |  1 +
>  src/qemu/qemu_driver.c  | 19 ++++++++++++++-----
>  3 files changed, 16 insertions(+), 5 deletions(-)

Reviewed-by: Peter Krempa <pkrempa@redhat.com>