Contrary to most APIs returning typed parameters, there are no constants
defined for the guest info data keys. This is was because many of the
keys needs to be dynamically constructed using one or more array index
values.
It is possible to define constants while still supporting dynamic
array indexes by simply defining the prefixes and suffixes as constants.
The consuming code can then combine the constants with array index
value.
With this approach, it is practical to add constants for the guest info
API keys.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
include/libvirt/libvirt-domain.h | 110 +++++++++++++++++++++++++++++++
src/libvirt-domain.c | 20 +-----
src/qemu/qemu_driver.c | 25 ++++---
3 files changed, 129 insertions(+), 26 deletions(-)
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index 048036e2ed..fd7cf01243 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -6745,6 +6745,116 @@ int virDomainSetLaunchSecurityState(virDomainPtr domain,
*/
#define VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_DEVICE ".device"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_COUNT:
+ *
+ * The number of disks defined on this domain as an unsigned int.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_COUNT "disk.count"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_PREFIX:
+ *
+ * The parameter name prefix to access each disk entry. Concatenate the
+ * prefix, the entry number formatted as an unsigned integer and one of the
+ * disk suffix parameters to form a complete parameter name.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "disk."
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_NAME:
+ *
+ * Device node (Linux) or device UNC (Windows) as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_NAME ".name"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_PARTITION:
+ *
+ * Whether this is a partition (true) or disk (false) as a boolean.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_PARTITION ".partition"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_COUNT:
+ *
+ * The number of device dependencies as an unsigned int.
+ *
+ * e.g. for LVs of the LVM this will hold the list of PVs, for LUKS encrypted
+ * volume this will contain the disk where the volume is placed. (Linux).
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_COUNT ".dependency.count"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_PREFIX:
+ *
+ * The parameter name prefix to access each dependency entry. Concatenate the
+ * disk prefix, the disk entry number formatted as an unsigned integer, the
+ * dependency prefix, the dependency entry number formatted as an unsigned
+ * integer and one of the dependency suffix parameters to form a complete
+ * parameter name.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_PREFIX ".dependency."
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_SUFFIX_NAME:
+ *
+ * A dependency name as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_SUFFIX_NAME ".name"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_SERIAL:
+ *
+ * Optional disk serial number as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_SERIAL ".serial"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_ALIAS:
+ *
+ * The device alias of the disk (e.g. sda) as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_ALIAS ".alias"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_ALIAS:
+ *
+ * Optional alias assigned to the disk, on Linux this is a name assigned by
+ * device mapper, as a string.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_ALIAS ".guest_alias"
+
+/**
+ * VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_BUS:
+ *
+ * Disk bus as reported by the guest OS.
+ *
+ * Since: 11.2.0
+ */
+#define VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_BUS ".guest_bus"
+
/**
* virDomainGuestInfoTypes:
*
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index cb19516c35..87ea7a28ad 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -13228,23 +13228,9 @@ virDomainSetVcpu(virDomainPtr domain,
* keys.
*
* VIR_DOMAIN_GUEST_INFO_DISKS:
- * Returns information about the disks within the domain. The typed
- * parameter keys are in this format:
- *
- * "disk.count" - the number of disks defined on this domain
- * as an unsigned int
- * "disk.<num>.name" - device node (Linux) or device UNC (Windows)
- * "disk.<num>.partition" - whether this is a partition or disk
- * "disk.<num>.dependency.count" - the number of device dependencies
- * e.g. for LVs of the LVM this will
- * 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
- * "disk.<num>.guest_bus" - disk bus as reported by the guest OS
+ * Returns information about the disks within the domain.
+ * The VIR_DOMAIN_GUEST_INFO_DISK_* constants define the known typed parameter
+ * keys.
*
* VIR_DOMAIN_GUEST_INFO_INTERFACES:
* Returns information about the interfaces within the domain. The typed
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 22f656b890..8f7e232abd 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -19206,22 +19206,25 @@ qemuAgentDiskInfoFormatParams(qemuAgentDiskInfo **info,
{
size_t i;
- virTypedParamListAddUInt(list, ndisks, "disk.count");
+ virTypedParamListAddUInt(list, ndisks, VIR_DOMAIN_GUEST_INFO_DISK_COUNT);
for (i = 0; i < ndisks; i++) {
- virTypedParamListAddString(list, info[i]->name, "disk.%zu.name", i);
- virTypedParamListAddBoolean(list, info[i]->partition, "disk.%zu.partition", i);
+ virTypedParamListAddString(list, info[i]->name,
+ VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_NAME, i);
+ virTypedParamListAddBoolean(list, info[i]->partition,
+ VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_PARTITION, i);
if (info[i]->dependencies) {
size_t ndeps = g_strv_length(info[i]->dependencies);
size_t j;
if (ndeps > 0)
- virTypedParamListAddUInt(list, ndeps, "disk.%zu.dependency.count", i);
+ virTypedParamListAddUInt(list, ndeps,
+ VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_COUNT, i);
for (j = 0; j < ndeps; j++) {
virTypedParamListAddString(list, info[i]->dependencies[j],
- "disk.%zu.dependency.%zu.name", i, j);
+ VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_SUFFIX_NAME, i, j);
}
}
@@ -19230,7 +19233,8 @@ qemuAgentDiskInfoFormatParams(qemuAgentDiskInfo **info,
virDomainDiskDef *diskdef = NULL;
if (address->serial)
- virTypedParamListAddString(list, address->serial, "disk.%zu.serial", i);
+ virTypedParamListAddString(list, address->serial,
+ VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_SERIAL, i);
/* match the disk to the target in the vm definition */
diskdef = virDomainDiskByAddress(vmdef,
@@ -19241,14 +19245,17 @@ qemuAgentDiskInfoFormatParams(qemuAgentDiskInfo **info,
address->unit);
if (diskdef && diskdef->dst)
- virTypedParamListAddString(list, diskdef->dst, "disk.%zu.alias", i);
+ virTypedParamListAddString(list, diskdef->dst,
+ VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_ALIAS, i);
if (address->bus_type)
- virTypedParamListAddString(list, address->bus_type, "disk.%zu.guest_bus", i);
+ virTypedParamListAddString(list, address->bus_type,
+ VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_BUS, i);
}
if (info[i]->alias)
- virTypedParamListAddString(list, info[i]->alias, "disk.%zu.guest_alias", i);
+ virTypedParamListAddString(list, info[i]->alias,
+ VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_ALIAS, i);
}
}
--
2.48.1