hvsupport: Split out common APIs from hypervisor API section

Common APIs such as virConnectOpen/Close and similar which are used by
the non-hypervisor drivers in libvirt are grouped together with
hypervisor drivers, which makes the table very wide.

Split them out into a separate group and clean up the list of hypervisor
drivers.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2023-05-17 15:59:30 +02:00
parent eca6846376
commit dc9c6c5405
1 changed files with 43 additions and 13 deletions

View File

@ -49,8 +49,19 @@ groupheaders = {
"virStorageDriver": "Storage Pool APIs",
"virSecretDriver": "Secret APIs",
"virNWFilterDriver": "Network Filter APIs",
"commonapis": "Common driver APIs",
}
# List of common APIs used with all driver kinds
commonapis = [
"virConnectOpen",
"virConnectClose",
"virConnectIsAlive",
"virConnectIsEncrypted",
"virConnectIsSecure",
"virConnectSupportsFeature",
"virConnectGetCapabilities",
]
srcs = []
for root, dirs, files in os.walk(os.path.join(srcdir, "src")):
@ -222,6 +233,10 @@ apis["virDomainMigrateConfirm3Params"] = {
# Group name -> hash of APIs { fields -> api name }
groups = {}
groups["commonapis"] = {
"apis": {},
"drivers": {}
}
ingrp = None
for drivertablefile in drivertablefiles:
with open(drivertablefile) as fh:
@ -244,7 +259,10 @@ for drivertablefile in drivertablefiles:
api = "vir" + name
if api in apis:
groups[ingrp]["apis"][field] = api
if api in commonapis:
groups["commonapis"]["apis"][field] = api
else:
groups[ingrp]["apis"][field] = api
elif re.search(r"\w+(Open|Close|URIProbe)", api) is not None:
continue
else:
@ -288,6 +306,9 @@ for src in srcs:
"Group %s already contains %s" % (ingrp, impl))
groups[ingrp]["drivers"][impl] = {}
if impl not in groups["commonapis"]["drivers"]:
groups["commonapis"]["drivers"][impl] = {}
else:
callbackmatch = re.search(r"\s*\.(\w+)\s*=\s*(\w+)\s*,?\s*" +
r"(?:/\*\s*(\d+\.\d+\.\d+)\s*" +
@ -317,18 +338,23 @@ for src in srcs:
"Method %s in %s is missing version" %
(meth, src))
if api not in groups[ingrp]["apis"]:
if api in groups["commonapis"]["apis"]:
groups["commonapis"]["drivers"][impl][api] = {
"vers": vers,
"deleted": deleted,
}
elif api in groups[ingrp]["apis"]:
groups[ingrp]["drivers"][impl][api] = {
"vers": vers,
"deleted": deleted,
}
else:
if re.search(r"\w+(Open|Close|URIProbe)", api):
continue
raise Exception("Found unexpected method " +
"%s in %s" % (api, ingrp))
groups[ingrp]["drivers"][impl][api] = {
"vers": vers,
"deleted": deleted,
}
if (api == "domainMigratePrepare" or
api == "domainMigratePrepare2" or
api == "domainMigratePrepare3"):
@ -345,16 +371,16 @@ for src in srcs:
# have a bit of manual fixup todo with the per-driver versioning
# and support matrix
groups["virHypervisorDriver"]["apis"]["connectOpenAuth"] = \
groups["commonapis"]["apis"]["connectOpenAuth"] = \
"virConnectOpenAuth"
groups["virHypervisorDriver"]["apis"]["connectOpenReadOnly"] = \
groups["commonapis"]["apis"]["connectOpenReadOnly"] = \
"virConnectOpenReadOnly"
groups["virHypervisorDriver"]["apis"]["domainMigrate"] = \
"virDomainMigrate"
openAuthVers = (0 * 1000 * 1000) + (4 * 1000) + 0
drivers = groups["virHypervisorDriver"]["drivers"]
drivers = groups["commonapis"]["drivers"]
for drv in drivers.keys():
openVersStr = drivers[drv]["connectOpen"]["vers"]
openVers = 0
@ -381,7 +407,7 @@ for drv in drivers.keys():
"vers": vers,
}
drivers = groups["virHypervisorDriver"]["drivers"]
# Another special case for the virDomainCreateLinux which was replaced
# with virDomainCreateXML
groups["virHypervisorDriver"]["apis"]["domainCreateLinux"] = \
@ -389,7 +415,12 @@ groups["virHypervisorDriver"]["apis"]["domainCreateLinux"] = \
createAPIVers = (0 * 1000 * 1000) + (0 * 1000) + 3
for drv in drivers.keys():
for drv in list(drivers.keys()):
# drop drivers from the "virHypervisorDriver" group which have only common APIs
if len(drivers[drv]) == 0:
drivers.pop(drv)
continue
if "domainCreateXML" not in drivers[drv]:
continue
createVersStr = drivers[drv]["domainCreateXML"]["vers"]
@ -414,7 +445,6 @@ for drv in drivers.keys():
"vers": vers,
}
# Finally we generate the HTML file with the tables
print('''<?xml version="1.0" encoding="UTF-8"?>