|
|
@ -209,12 +209,43 @@ function arg2_required() { |
|
|
|
return 0 |
|
|
|
} |
|
|
|
|
|
|
|
# test arg3 required |
|
|
|
function arg3_required() { |
|
|
|
[[ -z "${3:-}" ]] && echoerr "ERROR: arg#3 expected!" && return 125 || return 0 |
|
|
|
} |
|
|
|
|
|
|
|
# test whether container <ct> exists yet? |
|
|
|
function container_exists() { |
|
|
|
arg1_required "$@" |
|
|
|
lxc list "$1" -c n -f csv | grep -q "^$1\$" |
|
|
|
} |
|
|
|
|
|
|
|
# 3 args expected: <commmand> <delay in s, example: 0.2> <max_attempts> |
|
|
|
function wait_for_command { |
|
|
|
arg3_required "$@" |
|
|
|
|
|
|
|
command=$1 |
|
|
|
delay=$2 |
|
|
|
max_attempt=$3 |
|
|
|
|
|
|
|
attempt=0 |
|
|
|
while ! eval "$command"; do |
|
|
|
attempt=$((attempt + 1)) |
|
|
|
if [[ $attempt -gt $max_attempt ]]; then |
|
|
|
echoerr "command <$command> failed after a delay of $(bc <<<"$max_attempt * $delay")s and $max_attempt attempts" |
|
|
|
return 1 |
|
|
|
else |
|
|
|
sleep "$delay" |
|
|
|
fi |
|
|
|
done |
|
|
|
echo SUCCESS |
|
|
|
} |
|
|
|
|
|
|
|
function wait_for_container_full_initialization { |
|
|
|
arg1_required "$@" |
|
|
|
wait_for_command "lxc exec $1 -- test -f /root/cloud-status.json" 0.2 40 |
|
|
|
} |
|
|
|
|
|
|
|
# build debian image with prebuild miaou-bash and various useful settings |
|
|
|
# ARG1=release [bullseye, buster] |
|
|
|
function build_miaou_image() { |
|
|
@ -304,6 +335,14 @@ EOF1 |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# convert array to string according to IFS arg1 |
|
|
|
# example: join "," "${MY_ARRAY[@]}" => one,two,three |
|
|
|
function join() { |
|
|
|
local IFS="$1" |
|
|
|
shift |
|
|
|
echo "$*" |
|
|
|
} |
|
|
|
|
|
|
|
# execute remote scripting onto one LXC container <CONTAINER> [COMMANDS, ...] |
|
|
|
# may use one command like: `lxc_exec ct1 uname -a` |
|
|
|
# or pipe like so: ` |
|
|
|