Optional Additional Setup

Profiles can specify 'setup_script' to do additional things.  If additional files/dirs are required, a 'setup_copy' map will copy them to the build instance so that 'setup_script' can use/install them.

TBD: docs.
This commit is contained in:
Jake Buchholz 2020-08-09 21:27:28 -07:00 committed by Mike Crute
parent d765bd4ab7
commit d593de3833
3 changed files with 38 additions and 4 deletions

View File

@ -69,8 +69,8 @@ builders = [
provisioners = [
{
type = "file"
source = "../scripts/nvme-ebs-links"
destination = "/tmp/nvme-ebs-links"
source = "./profile/{{user `profile`}}/{{user `profile_build`}}/setup-ami.d"
destination = "/tmp/setup-ami.d"
}
{
type = "shell"

View File

@ -513,16 +513,35 @@ class ConfigBuilder:
profile = os.path.splitext(os.path.split(file)[-1])[0]
self.build_profile(profile)
def rel_symlink(self, src_path, dest_dir, dest):
os.symlink(
os.path.relpath(src_path, dest_dir),
os.path.join(dest_dir, dest))
def build_profile(self, profile):
build_config = pyhocon.ConfigFactory.parse_file(
os.path.join(self.config_path, f"{profile}.conf"))
for build, cfg in build_config["BUILDS"].items():
build_dir = os.path.join(self.out_dir, profile, build)
setup_dir = os.path.join(build_dir, "setup-ami.d")
# Always start fresh
shutil.rmtree(build_dir, ignore_errors=True)
os.makedirs(build_dir)
os.makedirs(setup_dir)
# symlink nvme script
self.rel_symlink("scripts/nvme-ebs-links", setup_dir, "nvme-ebs-links")
# symlink additional setup_script
if "setup_script" in cfg.keys():
self.rel_symlink(cfg["setup_script"], setup_dir, "setup_script")
del cfg["setup_script"]
if "setup_copy" in cfg.keys():
for dst, src in cfg["setup_copy"].items():
self.rel_symlink(src, setup_dir, dst)
del cfg["setup_copy"]
cfg["profile"] = profile
cfg["profile_build"] = build

View File

@ -154,7 +154,7 @@ install_core_packages() {
}
setup_mdev() {
cp /tmp/nvme-ebs-links "$TARGET/lib/mdev"
cp /tmp/setup-ami.d/nvme-ebs-links "$TARGET/lib/mdev"
# insert nvme ebs mdev configs just above "# fallback" comment
sed -n -i \
@ -288,6 +288,19 @@ configure_ntp() {
-i "$TARGET/etc/chrony/chrony.conf"
}
setup_script() {
if [ -f /tmp/setup-ami.d/setup_script ]; then
einfo "Executing additional setup script"
(
cd /tmp/setup-ami.d
chmod u+x ./setup_script
TARGET="$TARGET" ./setup_script
)
else
einfo "No additional setup script"
fi
}
cleanup() {
# Sweep cruft out of the image that doesn't need to ship or will be
# re-generated when the image boots
@ -344,6 +357,8 @@ main() {
create_alpine_user
configure_ntp
setup_script
einfo "All done, cleaning up"
cleanup
}