vuinputd/distro-tests/cloud-init/create-cloud-init-iso.sh

60 lines
1.7 KiB
Bash

#!/bin/sh
# SPDX-License-Identifier: MIT
set -eu
# How to do it is documented on https://cloudinit.readthedocs.io/en/latest/howto/launch_qemu.html
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
PREPARED_DIR="${ROOT_DIR}/prepared"
IDENTITY_DIR="${PREPARED_DIR}/identity"
TMP_DIR="${ROOT_DIR}/tmp"
KEY_PRIV="${IDENTITY_DIR}/ssh_ed25519"
KEY_PUB="${IDENTITY_DIR}/ssh_ed25519.pub"
USER_DATA_SRC="${ROOT_DIR}/cloud-init/template/user-data.tmpl"
META_DATA_SRC="${ROOT_DIR}/cloud-init/template/meta-data.tmpl"
mkdir -p ${TMP_DIR}
# --------------------------------------------------------------------
# SSH identity (per user, stable)
# --------------------------------------------------------------------
if [ ! -f "${KEY_PRIV}" ]; then
echo "[*] Generating SSH keypair"
ssh-keygen -t ed25519 -N "" -f "${KEY_PRIV}" -C "distro-tests"
else
echo "[*] Reusing existing SSH key"
fi
SSH_KEY="$(cat "${KEY_PUB}")"
# --------------------------------------------------------------------
# Build user-data with injected SSH key
# --------------------------------------------------------------------
USER_DATA_TMP="${TMP_DIR}/user-data"
META_DATA_TMP="${TMP_DIR}/meta-data"
awk -v key="${SSH_KEY}" '
/^users:/ { print; users=1; next }
users && /ssh_authorized_keys:/ {
print
print " - " key
next
}
{ print }
' "${USER_DATA_SRC}" > "${USER_DATA_TMP}"
cp "${META_DATA_SRC}" "${META_DATA_TMP}"
# --------------------------------------------------------------------
# Create seed ISO
# --------------------------------------------------------------------
echo "[*] Creating cloud-init seed.iso"
cloud-localds \
"${PREPARED_DIR}/seed.iso" \
"${USER_DATA_TMP}" \
"${META_DATA_TMP}"
echo "[✓] cloud-init ISO ready: ${PREPARED_DIR}/seed.iso"