First recipes
This commit is contained in:
150
build
Executable file
150
build
Executable file
@ -0,0 +1,150 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Simple build wrapper
|
||||
|
||||
ACTION=${1}
|
||||
OS=${2}
|
||||
VERSION=${3}
|
||||
|
||||
RCP_DIR="./recipes"
|
||||
PACKER=${PACKER:-packer}
|
||||
|
||||
#
|
||||
# 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} -var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" -only="base.qemu.${OS}" "${RCP_DIR}/${OS}/."
|
||||
${PACKER} build ${PACKER_OPTS} -force -var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" -except="base.qemu.${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}.qemu.${OS}" \
|
||||
"${RCP_DIR}/${OS}/."
|
||||
}
|
||||
|
||||
#
|
||||
# Run many builds for one OS
|
||||
#
|
||||
run_many() {
|
||||
targets="${@:4}"
|
||||
only=""
|
||||
for target in ${targets};do
|
||||
only="${only}-only=${target}.qemu.${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 $@
|
||||
;;
|
||||
|
||||
"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
|
Reference in New Issue
Block a user