lorax-composer: pass customization.kernel append to extra_boot_args

This allows iso builds to include the extra kernel boot parameters by
passing them to the arch-specific live/*tmpl template.

Also adds tests to make sure it is written to config.toml in the build
metadata.

Resolves: rhbz#1688335
This commit is contained in:
Brian C. Lane 2019-03-14 16:01:55 -07:00
parent 9cebd1ddaf
commit 0b8a5ac87c
3 changed files with 31 additions and 5 deletions

View File

@ -19,7 +19,7 @@ BuildRequires: python2-devel
BuildRequires: python-sphinx yum python-mako pykickstart BuildRequires: python-sphinx yum python-mako pykickstart
BuildRequires: python-flask python-gobject libgit2-glib python2-pytoml python-semantic_version BuildRequires: python-flask python-gobject libgit2-glib python2-pytoml python-semantic_version
Requires: lorax >= 19.7.20 Requires: lorax >= 19.7.22
Requires(pre): /usr/bin/getent Requires(pre): /usr/bin/getent
Requires(pre): /usr/sbin/groupadd Requires(pre): /usr/sbin/groupadd
Requires(pre): /usr/sbin/useradd Requires(pre): /usr/sbin/useradd

View File

@ -147,6 +147,21 @@ def bootloader_append(line, kernel_append):
return str(ks.handler.bootloader).splitlines()[-1] return str(ks.handler.bootloader).splitlines()[-1]
def get_kernel_append(recipe):
"""Return the customizations.kernel append value
:param recipe:
:type recipe: Recipe object
:returns: append value or empty string
:rtype: str
"""
if "customizations" not in recipe or \
"kernel" not in recipe["customizations"] or \
"append" not in recipe["customizations"]["kernel"]:
return ""
return recipe["customizations"]["kernel"]["append"]
def customize_ks_template(ks_template, recipe): def customize_ks_template(ks_template, recipe):
""" Customize the kickstart template and return it """ Customize the kickstart template and return it
@ -158,11 +173,9 @@ def customize_ks_template(ks_template, recipe):
Apply customizations.kernel.append to the bootloader argument in the template. Apply customizations.kernel.append to the bootloader argument in the template.
Add bootloader line if it is missing. Add bootloader line if it is missing.
""" """
if "customizations" not in recipe or \ kernel_append = get_kernel_append(recipe)
"kernel" not in recipe["customizations"] or \ if not kernel_append:
"append" not in recipe["customizations"]["kernel"]:
return ks_template return ks_template
kernel_append = recipe["customizations"]["kernel"]["append"]
found_bootloader = False found_bootloader = False
output = StringIO() output = StringIO()
for line in ks_template.splitlines(): for line in ks_template.splitlines():
@ -465,6 +478,7 @@ def start_build(cfg, yumlock, gitlock, branch, recipe_name, compose_type, test_m
cfg_args["project"] = os_release.get("NAME") cfg_args["project"] = os_release.get("NAME")
cfg_args["releasever"] = os_release.get("VERSION_ID") cfg_args["releasever"] = os_release.get("VERSION_ID")
cfg_args["volid"] = "" cfg_args["volid"] = ""
cfg_args["extra_boot_args"] = get_kernel_append(recipe)
cfg_args.update({ cfg_args.update({
"compression": "xz", "compression": "xz",

View File

@ -1082,6 +1082,12 @@ class ServerTestCase(unittest.TestCase):
self.assertTrue("network --hostname=" in final_ks) self.assertTrue("network --hostname=" in final_ks)
self.assertTrue("sshkey --user root" in final_ks) self.assertTrue("sshkey --user root" in final_ks)
# Examine the config.toml to make sure it has an empty extra_boot_args
cfg_path = joinpaths(self.repo_dir, "var/lib/lorax/composer/results/", build_id, "config.toml")
cfg_dict = toml.loads(open(cfg_path, "r").read())
self.assertTrue("extra_boot_args" in cfg_dict)
self.assertEqual(cfg_dict["extra_boot_args"], "")
# Delete the finished build # Delete the finished build
# Test the /api/v0/compose/delete/<uuid> route # Test the /api/v0/compose/delete/<uuid> route
resp = self.server.delete("/api/v0/compose/delete/%s" % build_id) resp = self.server.delete("/api/v0/compose/delete/%s" % build_id)
@ -1235,6 +1241,12 @@ class ServerTestCase(unittest.TestCase):
self.assertNotEqual(bootloader_line, "", "No bootloader line found") self.assertNotEqual(bootloader_line, "", "No bootloader line found")
self.assertTrue("nosmt=force" in bootloader_line) self.assertTrue("nosmt=force" in bootloader_line)
# Examine the config.toml to make sure it was written there as well
cfg_path = joinpaths(self.repo_dir, "var/lib/lorax/composer/results/", build_id, "config.toml")
cfg_dict = toml.loads(open(cfg_path, "r").read())
self.assertTrue("extra_boot_args" in cfg_dict)
self.assertEqual(cfg_dict["extra_boot_args"], "nosmt=force")
def assertInputError(self, resp): def assertInputError(self, resp):
"""Check all the conditions for a successful input check error result""" """Check all the conditions for a successful input check error result"""
data = json.loads(resp.data) data = json.loads(resp.data)