wait_for_command
This commit is contained in:
@@ -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: `
|
||||
|
||||
+17
-3
@@ -13,9 +13,9 @@ readonly NEW_GROUP EXPANDED_CONF
|
||||
|
||||
on_exit() {
|
||||
if [ -n "${1:-}" ]; then
|
||||
echo "Aborted by $1"
|
||||
echowarn "Aborted by $1"
|
||||
elif [ "${status:-}" -ne 0 ]; then
|
||||
echo "Failure (status $status)"
|
||||
echowarn "Failure (status $status)"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -387,6 +387,14 @@ function preload_bookworm_image {
|
||||
fi
|
||||
}
|
||||
|
||||
function is_email_valid {
|
||||
[[ "$1" =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$ ]]
|
||||
}
|
||||
|
||||
function auto_detect_email {
|
||||
:
|
||||
}
|
||||
|
||||
### MAIN
|
||||
|
||||
if [[ "${1:-}" == "SESSION_RELOAD_REQUIRED" ]]; then
|
||||
@@ -414,8 +422,14 @@ else
|
||||
TARGET=${1:-}
|
||||
CURRENT_USER=$(id -un)
|
||||
|
||||
check_target
|
||||
is_email_valid "pvincent" && echo OK || echo NOPE
|
||||
is_email_valid "pvincent@aa" && echo OK || echo NOPE
|
||||
is_email_valid "pvincent@artcode." && echo OK || echo NOPE
|
||||
is_email_valid "pvincent@artcode.re" && echo OK || echo NOPE
|
||||
exit 1
|
||||
|
||||
sudo_required
|
||||
check_target
|
||||
install_miaou_bash
|
||||
install_mandatory_commands
|
||||
prepare_toolbox
|
||||
|
||||
@@ -54,6 +54,9 @@ function create() {
|
||||
|
||||
echo -n "creating new container <$CONTAINER> based on image <$CONTAINER_RELEASE>... "
|
||||
bridge_gw=$(lxc network get lxdbr0 ipv4.address | cut -d'/' -f1)
|
||||
packages=(git file bc bash-completion)
|
||||
[[ "$OPTION_SSH" == true ]] && packages+=(openssh-server)
|
||||
packages_string=$(join ', ' "${packages[@]}")
|
||||
user_data="$(
|
||||
cat <<EOF
|
||||
#cloud-config
|
||||
@@ -77,11 +80,7 @@ apt:
|
||||
package_update: true
|
||||
package_upgrade: true
|
||||
package_reboot_if_required: true
|
||||
packages:
|
||||
- git
|
||||
- file
|
||||
- bc
|
||||
- bash-completion
|
||||
packages: $packages_string
|
||||
write_files:
|
||||
- path: /etc/sudoers.d/10-add_TOOLBOX_to_secure_path
|
||||
content: >
|
||||
@@ -159,10 +158,6 @@ EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$OPTION_SSH" == true ]]; then
|
||||
lxc exec "$CONTAINER" -- /opt/miaou-bash/tools/idem_apt_install openssh-server
|
||||
fi
|
||||
|
||||
if [[ "$OPTION_SSH" == true && "$OPTION_SAMEUSER" == true ]]; then
|
||||
lxc-miaou-enable-ssh "$CONTAINER"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user