Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ignition: Create /run/ignition.env on every boot #86

Merged
merged 1 commit into from
Feb 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions dracut/30ignition/ignition-generator
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,31 @@ else
add_requires ignition-diskful-subsequent.target ignition-subsequent.target
fi
fi
cat > ${UNIT_DIR}/ignition-setup-pre.service <<EOF
[Unit]
Description=Ignition env setup
DefaultDependencies=false

Requires=local-fs-pre.target
Before=local-fs-pre.target

OnFailure=emergency.target
OnFailureJobMode=isolate

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/ignition-setup-pre
EOF

cat > ${UNIT_DIR}/ignition-setup.service <<EOF
[Unit]
Description=Ignition (setup)
DefaultDependencies=false

# Flatcar: Load Ignition binary
Requires=sysusr-usr.mount
After=sysusr-usr.mount
Requires=sysusr-usr.mount ignition-setup-pre.service
After=sysusr-usr.mount ignition-setup-pre.service

Requires=local-fs-pre.target
Before=local-fs-pre.target
Expand Down
42 changes: 42 additions & 0 deletions dracut/30ignition/ignition-setup-pre.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/bin/bash
# This is split out of the generator to not write to /run/ from it

set -e

cmdline=( $(</proc/cmdline) )
cmdline_arg() {
local name="$1" value="$2"
for arg in "${cmdline[@]}"; do
if [[ "${arg%%=*}" == "${name}" ]]; then
value="${arg#*=}"
fi
done
echo "${value}"
}

oem_id=metal
if [[ $(systemd-detect-virt || true) =~ ^(kvm|qemu)$ ]]; then
oem_id=qemu
fi

oem_cmdline="$(cmdline_arg flatcar.oem.id ${oem_id})"
if [[ "${oem_id}" = "${oem_cmdline}" ]]; then
oem_cmdline="$(cmdline_arg coreos.oem.id ${oem_id})"
fi

# Ignition changed the platform name to "aws"
if [ "${oem_cmdline}" = "ec2" ]; then
oem_cmdline="aws"
fi

# Ignition changed the platform name to "gcp"
if [ "${oem_cmdline}" = "gce" ]; then
oem_cmdline="gcp"
fi

# To maintain compatibility with eventual legacy 'flatcar.oem.id=pxe'
if [ "${oem_cmdline}" = "pxe" ]; then
oem_cmdline="metal"
fi

{ echo "OEM_ID=${oem_cmdline}" ; echo "PLATFORM_ID=${oem_cmdline}" ; } > /run/ignition.env
38 changes: 0 additions & 38 deletions dracut/30ignition/ignition-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,41 +35,3 @@ fi
if [[ -e "${src}/config.ign" ]]; then
cp "${src}/config.ign" "${dst}/user.ign"
fi

cmdline=( $(</proc/cmdline) )
cmdline_arg() {
local name="$1" value="$2"
for arg in "${cmdline[@]}"; do
if [[ "${arg%%=*}" == "${name}" ]]; then
value="${arg#*=}"
fi
done
echo "${value}"
}

oem_id=metal
if [[ $(systemd-detect-virt || true) =~ ^(kvm|qemu)$ ]]; then
oem_id=qemu
fi

oem_cmdline="$(cmdline_arg flatcar.oem.id ${oem_id})"
if [[ "${oem_id}" = "${oem_cmdline}" ]]; then
oem_cmdline="$(cmdline_arg coreos.oem.id ${oem_id})"
fi

# Ignition changed the platform name to "aws"
if [ "${oem_cmdline}" = "ec2" ]; then
oem_cmdline="aws"
fi

# Ignition changed the platform name to "gcp"
if [ "${oem_cmdline}" = "gce" ]; then
oem_cmdline="gcp"
fi

# To maintain compatibility with eventual legacy 'flatcar.oem.id=pxe'
if [ "${oem_cmdline}" = "pxe" ]; then
oem_cmdline="metal"
fi

{ echo "OEM_ID=${oem_cmdline}" ; echo "PLATFORM_ID=${oem_cmdline}" ; } > /run/ignition.env
4 changes: 2 additions & 2 deletions dracut/30ignition/ignition-subsequent.target
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ ConditionPathExists=/etc/initrd-release
Before=initrd.target

# Run the generic rootfs setup helpers
Requires=initrd-setup-root.service initrd-setup-root-after-ignition.service
After=initrd-setup-root.service initrd-setup-root-after-ignition.service
Requires=initrd-setup-root.service initrd-setup-root-after-ignition.service ignition-setup-pre.service
After=initrd-setup-root.service initrd-setup-root-after-ignition.service ignition-setup-pre.service

# Make sure we stop all the units before switching root
Conflicts=initrd-switch-root.target umount.target
Expand Down
4 changes: 4 additions & 0 deletions dracut/30ignition/module-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ install() {
inst_script "$moddir/ignition-setup.sh" \
"/usr/sbin/ignition-setup"

# Flatcar: add ignition-setup-pre
inst_script "$moddir/ignition-setup-pre.sh" \
"/usr/sbin/ignition-setup-pre"

# Rule to allow udev to discover unformatted encrypted devices
inst_simple "$moddir/99-xx-ignition-systemd-cryptsetup.rules" \
"/usr/lib/udev/rules.d/99-xx-ignition-systemd-cryptsetup.rules"
Expand Down