1
0
mirror of https://github.com/mail-in-a-box/mailinabox.git synced 2025-04-01 23:57:05 +00:00
mailinabox/tests/bin/provision_functions.sh
2024-10-04 16:27:26 -04:00

92 lines
2.5 KiB
Bash

#####
##### This file is part of Mail-in-a-Box-LDAP which is released under the
##### terms of the GNU Affero General Public License as published by the
##### Free Software Foundation, either version 3 of the License, or (at
##### your option) any later version. See file LICENSE or go to
##### https://github.com/downtownallday/mailinabox-ldap for full license
##### details.
#####
# source this file
#
# requires: lx_functions.sh
#
. "$(dirname "$BASH_SOURCE")/../lib/misc.sh"
load_provision_defaults() {
#
# search from the current directory up for a file named
# ".provision_defaults"
#
if [ -z "$PROVISION_DEFAULTS_FILE" ]; then
PROVISION_DEFAULTS_FILE="$(pwd)/.provision_defaults"
while [ "$PROVISION_DEFAULTS_FILE" != "/.provision_defaults" ]; do
[ -e "$PROVISION_DEFAULTS_FILE" ] && break
PROVISION_DEFAULTS_FILE="$(realpath -m "$PROVISION_DEFAULTS_FILE/../..")/.provision_defaults"
done
source "$PROVISION_DEFAULTS_FILE" || return 1
fi
if [ ! -e "$PROVISION_DEFAULTS_FILE" ]; then
return 1
fi
}
provision_start() {
load_provision_defaults || return 1
local base_image="${1:-$DEFAULT_LXD_IMAGE}"
local guest_mount_path="$2"
shift; shift
local opts=( "$@" )
if [ ${#opts[@]} -eq 0 ]; then
opts=( "${DEFAULT_LXD_INST_OPTS[@]}" )
fi
# set these globals
project="$(lx_guess_project_name)"
inst="$(basename "$PWD")"
provision_start_s="$(date +%s)"
echo "Creating instance '$inst' from image $base_image (${opts[@]})"
lx_launch_vm_and_wait \
"$project" "$inst" "$base_image" "$guest_mount_path" \
"${opts[@]}" \
|| return 1
}
provision_shell() {
# provision_start must have been called first!
local remote_path="/tmp/provision.sh"
local lxc_flags="--uid 0 --gid 0 --mode 755 --create-dirs"
if [ ! -z "$1" ]; then
lxc --project "$project" file push "$1" "${inst}${remote_path}" $lxc_flags || return 1
else
local tmp=$(mktemp)
echo "#!/bin/bash" >"$tmp"
cat >>"$tmp"
lxc --project "$project" file push "$tmp" "${inst}${remote_path}" $lxc_flags || return 1
rm -f "$tmp"
fi
lxc --project "$project" exec "$inst" --cwd / --env PROVISION=true \
-- "$remote_path"
}
provision_done() {
local rc="${1:-0}"
echo "Elapsed: $(elapsed_pretty "$provision_start_s" "$(date +%s)")"
if [ $rc -ne 0 ]; then
echo "Failed with code $rc"
return 1
else
echo "Success!"
return 0
fi
}