v2:
 - possibility to query flags for every API at once

   A comment in v1 suggested that polling flags one by one is
   ineffective. It was also limited to virDomainBlockResize.

   This version adds an API 'virConnectGetIntrospection' which allows
   to probe for every flag of every API at once via the introspection
   XML which also informs users about supported typed parameters.

 Patches 1-34 are new in the series. Patch 35 is adapted to use the new
 introspection API.

This is partially a RFC:
 - documentation and schema for the new XML will be contributed later
 - I've contemplated adding typed parameters as input for the new API if
   we'd want to extend it to e.g. allow probing supported stuff for e.g.
   a hypervisor version

Breakdown of patches:

Semi-unrelated refactors/fixes:
  remote_protocol-structs: fix mis-aligned
    'remote_domain_set_throttle_group_args'
  qemu: driver: Unify coding style
  util: typedparam: Convert VIR_TYPED_PARAM_CHECK_TYPE into a function
  util: virTypedParamValidateType: Don't report unknown typed parameter
    type as '(null)'
  util: Replace open-coded internals of VIR_TYPED_PARAMS_DEBUG with
    'virTypedParamDebugstr'
  util: typedparam: Unexport
    virTypedParameterTypeFromString/virTypedParameterTypeToString
  util: typedparam: Refactor and fix typed param validation
  scripts: check-symfile: Allow also symbols in 'readonly' section
  virHostCPUGet(Map|Stats): Remove unused 'flags'
  virHostMemGet(Stats|Parameters): Remove unused 'flags'
  virNodeSuspend: Remove unused 'flags'

Changes to allow the introspection script to parse flags:
  qemu: backup: Move 'virCheckFlags' to top level functions
  qemu: attach/detach device: Move 'virCheckFlags' to top level
    functions
  qemu: dump: Move 'virCheckFlags' to top level functions
  qemu: checkpoint: Move 'virCheckFlags' to top level functions
  qemuDomainRestore(Flags|Params): Refactor flag checking
  qemu: snapshot: Move flag checks to top level functions
  qemuDomainGetLaunchSecurityInfo: Move flag check to top level
  qemuDomainDetachDeviceAlias: Move 'flags' validation to top level
  qemuDomainManagedSaveDefineXML: Add top-level flag validation
  qemuDomainQemuMonitorCommand: Add top-level flag validation
  qemuConnectDomainQemuMonitorEventRegister: Add top-level flag
    validation
  qemuDomainGetMetadata: Add top-level flag validation

API addition and implementation of the introspection api supporting flag
introspection:
  API: Introduce 'virConnectGetIntrospection'
  virsh: Introduce 'introspection' command which uses
    'virConnectGetIntrospection'
  scripts: Introduce 'getintrospection' script
  qemu: Implement 'virConnectGetIntrospection'

Cleanups needed in order to support typed parameter introspection
  util: typedparam: Introduce 'virTypedParamsValidateTemplate'
  qemu: migration: Use 'virTypedParamsValidateTemplate' for migration
    params
  qemu: Reimplement 'qemuDomainValidateBlockIoTune' using
    'virTypedParamsValidateTemplate'
  util: hostmem: Make parameters for 'virHostMemSetParameters'
    introspectable
  qemuDomainSetSchedulerParameters: Make typed parameters introspectable
  qemuDomainSetIOThreadParams: Move typed parameter validation to top
    level

Implementation of typed parameter introspection:
  introspection: Add introspection of input typed parameters

Original patch to prevent shrink in virsh:
  virsh: blockresize: Use VIR_DOMAIN_BLOCK_RESIZE_EXTEND when available
    and introduce --allow-shrink

 docs/manpages/virsh.rst         |  30 +-
 include/libvirt/libvirt-host.h  |   3 +
 scripts/check-symfile.py        |   2 +-
 scripts/genintrospection.py     | 347 ++++++++++++++++++++
 scripts/meson.build             |   1 +
 src/bhyve/bhyve_driver.c        |  20 +-
 src/ch/ch_driver.c              |  11 +-
 src/conf/domain_conf.c          |   3 +-
 src/conf/domain_conf.h          |   4 +
 src/conf/domain_event.c         |   4 +-
 src/conf/domain_event.h         |   5 +
 src/driver-hypervisor.h         |   5 +
 src/libvirt-host.c              |  40 +++
 src/libvirt_private.syms        |  10 +-
 src/libvirt_public.syms         |   5 +
 src/lxc/lxc_driver.c            |  24 +-
 src/openvz/openvz_driver.c      |  12 +-
 src/qemu/meson.build            |  18 ++
 src/qemu/qemu_backup.c          |   8 +-
 src/qemu/qemu_backup.h          |   3 +-
 src/qemu/qemu_checkpoint.c      |  11 -
 src/qemu/qemu_driver.c          | 543 ++++++++++++++++++++------------
 src/qemu/qemu_migration.c       |  29 ++
 src/qemu/qemu_migration.h       |  32 +-
 src/qemu/qemu_snapshot.c        |  27 --
 src/remote/remote_driver.c      |   1 +
 src/remote/remote_protocol.x    |  15 +-
 src/remote_protocol-structs     |  21 +-
 src/util/meson.build            |   1 +
 src/util/virhostcpu.c           |  10 +-
 src/util/virhostcpu.h           |   6 +-
 src/util/virhostmem.c           |  53 ++--
 src/util/virhostmem.h           |  11 +-
 src/util/virintrospection.c     |  82 +++++
 src/util/virintrospection.h     |  20 ++
 src/util/virnodesuspend.c       |   5 +-
 src/util/virnodesuspend.h       |   3 +-
 src/util/virtypedparam-public.c |  54 ++--
 src/util/virtypedparam.c        | 222 +++++++++----
 src/util/virtypedparam.h        |  26 +-
 src/vz/vz_driver.c              |  12 +-
 tests/virhostcputest.c          |   2 +-
 tools/virsh-domain.c            |  59 ++++
 tools/virsh-host.c              |  43 +++
 44 files changed, 1384 insertions(+), 459 deletions(-)
 create mode 100644 scripts/genintrospection.py
 create mode 100644 src/util/virintrospection.c
 create mode 100644 src/util/virintrospection.h

-- 
2.54.0

Reply via email to