createiso: Make ISO level more granular

Make it possible to set the level separately for each variant and
architecture.

JIRA: RHELCMP-9341

Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
Lubomír Sedlář 2022-08-16 14:25:43 +02:00
parent 13ea8e5834
commit 11fa342507
6 changed files with 63 additions and 5 deletions

View File

@ -1286,7 +1286,9 @@ Options
suffix (using multiples of 1024).
**iso_level**
(*int*) [optional] -- Set the ISO9660 conformance level. Valid numbers are 1 to 4.
(*int|list*) [optional] -- Set the ISO9660 conformance level. This is
either a global single value (a number from 1 to 4), or a variant/arch
mapping.
**split_iso_reserve** = 10MiB
(*int|str*) -- how much free space should be left on each disk. The format

View File

@ -760,8 +760,10 @@ def make_schema():
"createiso_break_hardlinks": {"type": "boolean", "default": False},
"createiso_use_xorrisofs": {"type": "boolean", "default": False},
"iso_level": {
"type": "number",
"enum": [1, 2, 3, 4],
"anyOf": [
{"type": "number", "enum": [1, 2, 3, 4]},
_variant_arch_mapping({"type": "number", "enum": [1, 2, 3, 4]}),
],
},
"iso_hfs_ppc64le_compatible": {"type": "boolean", "default": True},
"multilib": _variant_arch_mapping(

View File

@ -338,7 +338,7 @@ class CreateisoPhase(PhaseLoggerMixin, PhaseBase):
supported=self.compose.supported,
hfs_compat=self.compose.conf["iso_hfs_ppc64le_compatible"],
use_xorrisofs=self.compose.conf.get("createiso_use_xorrisofs"),
iso_level=self.compose.conf.get("iso_level"),
iso_level=get_iso_level_config(self.compose, variant, arch),
)
if bootable:
@ -821,3 +821,15 @@ class OldFileLinker(object):
"""Clean up all files created by this instance."""
for f in self.linked_files:
os.unlink(f)
def get_iso_level_config(compose, variant, arch):
"""
Get configured ISO level for this variant and architecture.
"""
level = compose.conf.get("iso_level")
if isinstance(level, list):
level = None
for c in get_arch_variant_data(compose.conf, "iso_level", arch, variant):
level = c
return level

View File

@ -32,6 +32,7 @@ from pungi.phases.createiso import (
load_and_tweak_treeinfo,
compare_packages,
OldFileLinker,
get_iso_level_config,
)
from pungi.util import (
failable,
@ -130,7 +131,7 @@ class ExtraIsosThread(WorkerThread):
supported=compose.supported,
hfs_compat=compose.conf["iso_hfs_ppc64le_compatible"],
use_xorrisofs=compose.conf.get("createiso_use_xorrisofs"),
iso_level=compose.conf.get("iso_level"),
iso_level=get_iso_level_config(compose, variant, arch),
)
os_tree = compose.paths.compose.os_tree(arch, variant)
if compose.conf["create_jigdo"]:

View File

@ -109,3 +109,9 @@ extra_isos = {
'filename': 'extra-{filename}',
}]
}
iso_level = [
(".*", {
"src": 3,
}),
]

View File

@ -1554,3 +1554,38 @@ class CreateisoPerformReusePhaseTest(helpers.PungiTestCase):
mock.call.abort(),
],
)
class ComposeConfGetIsoLevelTest(helpers.PungiTestCase):
def test_global_config(self):
compose = helpers.DummyCompose(self.topdir, {"iso_level": 3})
self.assertEqual(
createiso.get_iso_level_config(
compose, compose.variants["Server"], "x86_64"
),
3,
)
def test_src_only_config(self):
compose = helpers.DummyCompose(
self.topdir,
{"iso_level": [(".*", {"src": 4})]},
)
self.assertEqual(
createiso.get_iso_level_config(compose, compose.variants["Server"], "src"),
4,
)
def test_no_match(self):
compose = helpers.DummyCompose(
self.topdir,
{"iso_level": [("^Server$", {"*": 4})]},
)
self.assertIsNone(
createiso.get_iso_level_config(
compose, compose.variants["Client"], "x86_64"
),
)