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.
This commit is contained in:
Brian C. Lane 2019-03-14 16:01:55 -07:00
parent f9665940bb
commit 5dea308080
2 changed files with 30 additions and 4 deletions

View File

@ -149,6 +149,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
@ -160,11 +175,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():
@ -535,6 +548,7 @@ def start_build(cfg, dnflock, 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

@ -1109,6 +1109,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)
@ -1262,6 +1268,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)