From 1822514b364055193f6d7326da681e4c2cda7fe4 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Wed, 2 Jul 2025 10:00:37 -0500 Subject: [PATCH] Use Jinja to manage includes The drawback to the native `%include` Kickstart directive is that it requires a static, hard-coded, absolute path. This means that we cannot, for example, host a copy of the kickstarts from a different branch for testing, without modifying the URLs of all the included files. Switching to using Jinja templates introduces a build step, but the result is that the artifacts are self-contained. This way, they can be deployed anywhere. I'm not sure where I'll put them, though, and they'll need a Jenkins job to run the build and publish them. --- .gitignore | 5 +++++ Makefile | 15 +++++++++++++++ fedora-rpi-common.ks => fedora-rpi-common.ks.j2 | 4 ++-- fedora-rpi-nvme-noswap.ks | 6 ------ fedora-rpi-nvme-noswap.ks.j2 | 6 ++++++ fedora-rpi-nvme.ks | 4 ---- fedora-rpi-nvme.ks.j2 | 4 ++++ fedora-rpi.ks | 5 ----- fedora-rpi.ks.j2 | 5 +++++ fedora.ks | 17 ----------------- fedora.ks.j2 | 17 +++++++++++++++++ render.py | 11 +++++++++++ 12 files changed, 65 insertions(+), 34 deletions(-) create mode 100644 .gitignore create mode 100644 Makefile rename fedora-rpi-common.ks => fedora-rpi-common.ks.j2 (87%) delete mode 100644 fedora-rpi-nvme-noswap.ks create mode 100644 fedora-rpi-nvme-noswap.ks.j2 delete mode 100644 fedora-rpi-nvme.ks create mode 100644 fedora-rpi-nvme.ks.j2 delete mode 100644 fedora-rpi.ks create mode 100644 fedora-rpi.ks.j2 delete mode 100644 fedora.ks create mode 100644 fedora.ks.j2 create mode 100755 render.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cc5d187 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +fedora.ks +fedora-rpi-common.ks +fedora-rpi.ks +fedora-rpi-nvme.ks +fedora-rpi-nvme-noswap.ks diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f16d532 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +KICKSTARTS = \ + fedora-rpi-nvme-noswap.ks \ + fedora-rpi-nvme.ks \ + fedora-rpi.ks \ + fedora.ks + +.PHONY: all clean + +all: $(KICKSTARTS) + +%.ks: %.ks.j2 + python3 render.py $< > $@ + +clean: + rm -f $(KICKSTARTS) diff --git a/fedora-rpi-common.ks b/fedora-rpi-common.ks.j2 similarity index 87% rename from fedora-rpi-common.ks rename to fedora-rpi-common.ks.j2 index 33c0bff..0c0c00f 100644 --- a/fedora-rpi-common.ks +++ b/fedora-rpi-common.ks.j2 @@ -1,4 +1,4 @@ -# vim: set ft=sh : +{# vim: set ft=sh.jinja : -#} bootloader --location none clearpart --all --initlabel --disklabel msdos part /boot/efi --fstype vfat --size 128 --label RASPBERRYPI @@ -11,7 +11,7 @@ bcm283x-overlays uboot-images-armv8 %end -%include http://git.pyrocufflink.net/infra/kickstart/raw/branch/master/fedora-common.ks +{% include "fedora-common.ks" %} %post --erroronfail cp -P /usr/share/uboot/rpi_arm64/u-boot.bin /boot/efi/rpi-u-boot.bin diff --git a/fedora-rpi-nvme-noswap.ks b/fedora-rpi-nvme-noswap.ks deleted file mode 100644 index d03cf4f..0000000 --- a/fedora-rpi-nvme-noswap.ks +++ /dev/null @@ -1,6 +0,0 @@ -# vim: set ft=sh : -%include http://git.pyrocufflink.net/infra/kickstart/raw/branch/master/fedora-disk-dch.ks -%include http://git.pyrocufflink.net/infra/kickstart/raw/branch/master/fedora-rpi-common.ks - -ignoredisk --only-use /dev/nvme0n1 -logvol /tmp --fstype ext4 --name tmp --vgname fedora --size 2048 --label tmp diff --git a/fedora-rpi-nvme-noswap.ks.j2 b/fedora-rpi-nvme-noswap.ks.j2 new file mode 100644 index 0000000..f54f6e2 --- /dev/null +++ b/fedora-rpi-nvme-noswap.ks.j2 @@ -0,0 +1,6 @@ +{# vim: set ft=sh.jinja : -#} +{% include "fedora-disk-dch.ks" %} +{% include "fedora-rpi-common.ks.j2" %} + +ignoredisk --only-use /dev/nvme0n1 +logvol /tmp --fstype ext4 --name tmp --vgname fedora --size 2048 --label tmp diff --git a/fedora-rpi-nvme.ks b/fedora-rpi-nvme.ks deleted file mode 100644 index fea2351..0000000 --- a/fedora-rpi-nvme.ks +++ /dev/null @@ -1,4 +0,0 @@ -# vim: set ft=sh : -%include http://git.pyrocufflink.net/infra/kickstart/raw/branch/master/fedora-rpi-nvme-noswap.ks - -logvol swap --fstype swap --name swap --vgname fedora --size 1024 --maxsize 8192 --label swap --grow diff --git a/fedora-rpi-nvme.ks.j2 b/fedora-rpi-nvme.ks.j2 new file mode 100644 index 0000000..29f16d8 --- /dev/null +++ b/fedora-rpi-nvme.ks.j2 @@ -0,0 +1,4 @@ +{# vim: set ft=sh.jinja : -#} +{% include "fedora-rpi-nvme-noswap.ks.j2" %} + +logvol swap --fstype swap --name swap --vgname fedora --size 1024 --maxsize 8192 --label swap --grow diff --git a/fedora-rpi.ks b/fedora-rpi.ks deleted file mode 100644 index 97f2846..0000000 --- a/fedora-rpi.ks +++ /dev/null @@ -1,5 +0,0 @@ -# vim: set ft=sh : -ignoredisk --only-use /dev/mmcblk0 -%include http://git.pyrocufflink.net/infra/kickstart/raw/branch/master/fedora-disk-dch.ks -%include http://git.pyrocufflink.net/infra/kickstart/raw/branch/master/fedora-rpi-common.ks -%include http://git.pyrocufflink.net/infra/kickstart/raw/branch/master/autoprovision.ks diff --git a/fedora-rpi.ks.j2 b/fedora-rpi.ks.j2 new file mode 100644 index 0000000..663da86 --- /dev/null +++ b/fedora-rpi.ks.j2 @@ -0,0 +1,5 @@ +{# vim: set ft=sh.jinja : -#} +ignoredisk --only-use /dev/mmcblk0 +{% include "fedora-disk-dch.ks" %} +{% include "fedora-rpi-common.ks.j2" %} +{% include "autoprovision.ks" %} diff --git a/fedora.ks b/fedora.ks deleted file mode 100644 index 14ee449..0000000 --- a/fedora.ks +++ /dev/null @@ -1,17 +0,0 @@ -# vim: set ft=sh sw=4 ts=4 sts=4 et : - -# Create the "standard" disk layout using only the first disk -# Other disks are left alone in case they already contain data, e.g. -# migrated from another system. -bootloader --location mbr -clearpart --all --initlabel --drives vda -reqpart - -%include https://git.pyrocufflink.net/infra/kickstart/raw/branch/master/fedora-disk-dch.ks -%include https://git.pyrocufflink.net/infra/kickstart/raw/branch/master/fedora-common.ks - -%packages -qemu-guest-agent -%end - -%include https://git.pyrocufflink.net/infra/kickstart/raw/branch/master/autoprovision.ks diff --git a/fedora.ks.j2 b/fedora.ks.j2 new file mode 100644 index 0000000..b982b43 --- /dev/null +++ b/fedora.ks.j2 @@ -0,0 +1,17 @@ +{# vim: set ft=sh.jinja sw=4 ts=4 sts=4 et : -#} + +# Create the "standard" disk layout using only the first disk +# Other disks are left alone in case they already contain data, e.g. +# migrated from another system. +bootloader --location mbr +clearpart --all --initlabel --drives vda +reqpart + +{% include "fedora-disk-dch.ks" %} +{% include "fedora-common.ks" %} + +%packages +qemu-guest-agent +%end + +{% include "autoprovision.ks" %} diff --git a/render.py b/render.py new file mode 100755 index 0000000..ed98497 --- /dev/null +++ b/render.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +import os +import sys + +import jinja2 + +env = jinja2.Environment( + loader=jinja2.FileSystemLoader(os.getcwd()), +) +tmpl = env.get_template(sys.argv[1]) +print(tmpl.render(), end='')