Kiwi: translate virtualbox and azure productmd formats

As discussed in
https://pagure.io/releng/failed-composes/issue/6047#comment-899622
the list of 'acceptable' types and formats (in productmd terms)
is locked down in productmd, we cannot just 'declare' new formats
in pungi as we kinda wound up doing by adding these Kiwi
extensions to the EXTENSIONS dict in image_build phase. So
instead, let's return the image_build phase to the way it was,
and add an additional layer of handling in kiwibuild phase for
these awkward cases, which 'translates' the file suffix to a
format productmd knows about already. This is actually how we
would rather behave anyway, because a Kiwi-produced
`vagrant.libvirt.box` file really is the same kind of thing as an
ImageFactory-produced `vagrant-libvirt.box` file; we want them to
have compatible metadata, we don't want them to look like
different things.

Merges: https://pagure.io/pungi/pull-request/1740
Signed-off-by: Adam Williamson <awilliam@redhat.com>
(cherry picked from commit 8fb694f000)
This commit is contained in:
Adam Williamson 2024-03-11 13:47:19 -07:00 committed by Stepan Oksanichenko
parent c63f9f41b6
commit 99a6dfe8ad
Signed by: soksanichenko
GPG Key ID: AB9983172AB1E45B
2 changed files with 19 additions and 8 deletions

View File

@ -34,12 +34,12 @@ EXTENSIONS = {
"rhevm-ova": ["rhevm.ova"], "rhevm-ova": ["rhevm.ova"],
"tar-gz": ["tar.gz"], "tar-gz": ["tar.gz"],
"vagrant-hyperv": ["vagrant-hyperv.box"], "vagrant-hyperv": ["vagrant-hyperv.box"],
"vagrant-libvirt": ["vagrant-libvirt.box", "vagrant.libvirt.box"], "vagrant-libvirt": ["vagrant-libvirt.box"],
"vagrant-virtualbox": ["vagrant-virtualbox.box", "vagrant.virtualbox.box"], "vagrant-virtualbox": ["vagrant-virtualbox.box"],
"vagrant-vmware-fusion": ["vagrant-vmware-fusion.box"], "vagrant-vmware-fusion": ["vagrant-vmware-fusion.box"],
"vdi": ["vdi"], "vdi": ["vdi"],
"vmdk": ["vmdk"], "vmdk": ["vmdk"],
"vpc": ["vhd", "vhdfixed"], "vpc": ["vhd"],
"vhd-compressed": ["vhd.gz", "vhd.xz"], "vhd-compressed": ["vhd.gz", "vhd.xz"],
"vsphere-ova": ["vsphere.ova"], "vsphere-ova": ["vsphere.ova"],
} }

View File

@ -11,6 +11,12 @@ from ..linker import Linker
from ..wrappers import kojiwrapper from ..wrappers import kojiwrapper
from .image_build import EXTENSIONS from .image_build import EXTENSIONS
KIWIEXTENSIONS = [
("vhd-compressed", ["vhdfixed.xz"], "vhd.xz"),
("vagrant-libvirt", ["vagrant.libvirt.box"], "vagrant-libvirt.box"),
("vagrant-virtualbox", ["vagrant.virtualbox.box"], "vagrant-virtualbox.box"),
]
class KiwiBuildPhase( class KiwiBuildPhase(
base.PhaseLoggerMixin, base.ImageConfigMixin, base.ConfigGuardedPhase base.PhaseLoggerMixin, base.ImageConfigMixin, base.ConfigGuardedPhase
@ -158,9 +164,9 @@ class RunKiwiBuildThread(WorkerThread):
for arch, paths in paths.items(): for arch, paths in paths.items():
for path in paths: for path in paths:
type_, suffix = _find_suffix(path) type_, format_ = _find_type_and_format(path)
if not suffix: if not format_:
# Path doesn't match any know type. # Path doesn't match any known type.
continue continue
# image_dir is absolute path to which the image should be copied. # image_dir is absolute path to which the image should be copied.
@ -186,7 +192,7 @@ class RunKiwiBuildThread(WorkerThread):
# Get the manifest type from the config if supplied, otherwise we # Get the manifest type from the config if supplied, otherwise we
# determine the manifest type based on the koji output # determine the manifest type based on the koji output
img.type = type_ img.type = type_
img.format = suffix img.format = format_
img.path = os.path.join(rel_image_dir, filename) img.path = os.path.join(rel_image_dir, filename)
img.mtime = util.get_mtime(image_dest) img.mtime = util.get_mtime(image_dest)
img.size = util.get_file_size(image_dest) img.size = util.get_file_size(image_dest)
@ -202,9 +208,14 @@ class RunKiwiBuildThread(WorkerThread):
self.pool.log_info("[DONE ] %s (task id: %s)" % (msg, task_id)) self.pool.log_info("[DONE ] %s (task id: %s)" % (msg, task_id))
def _find_suffix(path): def _find_type_and_format(path):
for type_, suffixes in EXTENSIONS.items(): for type_, suffixes in EXTENSIONS.items():
for suffix in suffixes: for suffix in suffixes:
if path.endswith(suffix): if path.endswith(suffix):
return type_, suffix return type_, suffix
# these are our kiwi-exclusive mappings for images whose extensions
# aren't quite the same as imagefactory
for type_, suffixes, format_ in KIWIEXTENSIONS:
if any(path.endswith(suffix) for suffix in suffixes):
return type_, format_
return None, None return None, None