bladerunner/packer/build-image.sh

93 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euxo pipefail
IMAGE_TYPE="${1:-ubuntu}"
PACKER_BUILD_FILE="${2:-}"
SKIP_LOCAL_CACHE="${SKIP_LOCAL_CACHE:-no}"
errmsg () {
echo "$@" > /dev/stderr
}
IMAGE_TYPE="${1:-ubuntu}"
preflight () {
case "${IMAGE_TYPE}" in
ubuntu)
PACKER_BUILD_FILE="boards/cm4-cluster-ubuntu-22.04.2.json"
if [ "${SKIP_LOCAL_CACHE}" != "yes" ]
then
REMOTE_IMAGE_URL="$(jq '.builders[0].file_urls' ${PACKER_BUILD_FILE} | grep https | tr -d ' \",')"
fi
;;
custom)
PACKER_BUILD_FILE="${2:-}"
if [ "${SKIP_LOCAL_CACHE}" != "yes" ]
then
REMOTE_IMAGE_URL="$(jq '.builders[0].file_urls' ${PACKER_BUILD_FILE} | grep https | tr -d ' \",')"
fi
if [ -z "${PACKER_BUILD_FILE}" ]
then
errmsg "[!] custom board requires a board file path"
exit 1
fi
;;
*)
errmsg "[!] invalid image type ${IMAGE_TYPE}."
errmsg "[!] valid image types are"
errmsg " - ubuntu"
errmsg " - custom path/to/board/file"
exit 1
;;
esac
}
cache_remote_url () {
if [ "${SKIP_LOCAL_CACHE}" = "yes" ]
then
echo "[+] skipping fetch of remote file: SKIP_LOCAL_CACHE=yes"
return 0
fi
local CACHED_FILE="$(jq '.builders[0].file_urls' ${PACKER_BUILD_FILE} | grep -v https | grep \" | tr -d ' \",')"
if [ -z "${CACHED_FILE}" ]
then
echo "[+] skipping fetch of remote file: no local file provided"
return 0
fi
if [ -z "${REMOTE_IMAGE_URL}" ]
then
echo "[+] skipping fetch of remote file: no remote file provided"
return 0
fi
if [ -s "${CACHED_FILE}" ]
then
echo "[+] skipping fetch of remote file: file already exists. To force redownloading,"
echo " run the following:"
echo ""
echo " rm ${CACHED_FILE}"
return 0
fi
curl -fsSL -o "${CACHED_FILE}" "${REMOTE_IMAGE_URL}"
}
build_image () {
sudo packer build ${PACKER_BUILD_FILE}
}
main () {
preflight
cache_remote_url
build_image
}
if [ "$0" = "-bash" ]
then
main
fi