#!/bin/bash set -eo pipefail # Simple build wrapper ACTION=${1} OS=${2} VERSION=${3} RCP_DIR="./recipes" PACKER=${PACKER:-packer} BUILDER=${BUILDER:-qemu} # # Init packer # install plugins # initPacker() { os=${1} ${PACKER} init ${RCP_DIR}/${os} } # # Run the build # First the "base" image then the provisionned ones # run() { ${PACKER} build ${PACKER_OPTS} -on-error=abort -var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" -only="base.*.${OS}" "${RCP_DIR}/${OS}/." ${PACKER} build ${PACKER_OPTS} -on-error=abort -force -var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" -except="base.*.${OS}" "${RCP_DIR}/${OS}/." } # # Run a specific build # run_build() { target=${4} ${PACKER} build ${PACKER_OPTS} -force \ -var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" \ -only="${target}.${BUILDER}.${OS}" \ "${RCP_DIR}/${OS}/." } # # Run many builds for one OS # run_many() { targets="${@:4}" only="" for target in ${targets};do only="${only}-only=${target}.${BUILDER}.${OS} " done ${PACKER} build ${PACKER_OPTS} -force \ -var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" \ ${only} \ "${RCP_DIR}/${OS}/." } # # List what you can build # list() { echo "You can build : " for os in "${RCP_DIR}"/*; do echo " * $(basename "${os}") :" cd "${os}" || exit 100 for vfile in *.pkrvars.hcl; do echo " - ${vfile}" | sed 's/\.pkrvars\.hcl$//' done cd - >/dev/null 2>&1 || exit 100 done exit 0 } # # Run all builds # run_all() { versions="" for os in "${RCP_DIR}"/*; do cd "${os}" || exit 100 for vfile in *.pkrvars.hcl; do versions="${versions} $(echo "${vfile}" | sed 's/\.auto\.pkrvars\.hcl$//')" done OS=$(basename ${os}) cd - >/dev/null 2>&1 || exit 100 for ver in ${versions}; do VERSION=${ver} run done versions="" done set +x } # # Start only ONE build # start_build() { if [ -z "${OS}" ]; then echo "OS Name is missing !" echo " Supported OS are :" printf " " ls ${RCP_DIR} exit 1 fi if [ -z "${VERSION}" ]; then echo "OS Version is missing !" echo " ex: ./build debian 10" exit 2 fi run } case "${ACTION}" in "list") list ;; "all") initPacker "${2}" || exit 1 run_all exit ${?} ;; "start") initPacker "${2}" || exit 1 start_build ;; "run") initPacker "${2}" || exit 1 run_build $@ ;; "runVMW") initPacker "${2}" || exit 1 run_build $@ ;; "mrun") initPacker "${2}" || exit 1 run_many $@ ;; *) echo "You need to provide a valid action!" echo " Supported actions are:" echo " - start " echo " - list " echo " - all" echo " - run" exit 1 ;; esac