From 5dea3080806d1e562153b6f5a85aea3dba112667 Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Thu, 14 Mar 2019 16:01:55 -0700 Subject: [PATCH] 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. --- src/pylorax/api/compose.py | 22 ++++++++++++++++++---- tests/pylorax/test_server.py | 12 ++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/pylorax/api/compose.py b/src/pylorax/api/compose.py index ffb3bdd9..3ac3061c 100644 --- a/src/pylorax/api/compose.py +++ b/src/pylorax/api/compose.py @@ -149,6 +149,21 @@ def bootloader_append(line, kernel_append): 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): """ 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. Add bootloader line if it is missing. """ - if "customizations" not in recipe or \ - "kernel" not in recipe["customizations"] or \ - "append" not in recipe["customizations"]["kernel"]: + kernel_append = get_kernel_append(recipe) + if not kernel_append: return ks_template - kernel_append = recipe["customizations"]["kernel"]["append"] found_bootloader = False output = StringIO() 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["releasever"] = os_release.get("VERSION_ID", "") cfg_args["volid"] = "" + cfg_args["extra_boot_args"] = get_kernel_append(recipe) cfg_args.update({ "compression": "xz", diff --git a/tests/pylorax/test_server.py b/tests/pylorax/test_server.py index 02216b94..7b5278f8 100644 --- a/tests/pylorax/test_server.py +++ b/tests/pylorax/test_server.py @@ -1109,6 +1109,12 @@ class ServerTestCase(unittest.TestCase): self.assertTrue("network --hostname=" 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 # Test the /api/v0/compose/delete/ route 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.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): """Check all the conditions for a successful input check error result""" data = json.loads(resp.data)