forked from Ponysearch/Ponysearch
LXC: add LXC tooling box (initial, WIP)
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
parent
5c0f9c8c79
commit
7751b29559
2 changed files with 153 additions and 0 deletions
1
Makefile
1
Makefile
|
@ -75,6 +75,7 @@ test: test.pep8 test.unit test.sh test.robot
|
||||||
- make pylint
|
- make pylint
|
||||||
|
|
||||||
test.sh:
|
test.sh:
|
||||||
|
shellcheck -x utils/lxc.sh
|
||||||
shellcheck -x utils/lib.sh
|
shellcheck -x utils/lib.sh
|
||||||
shellcheck -x utils/filtron.sh
|
shellcheck -x utils/filtron.sh
|
||||||
shellcheck -x utils/searx.sh
|
shellcheck -x utils/searx.sh
|
||||||
|
|
152
utils/lxc.sh
Executable file
152
utils/lxc.sh
Executable file
|
@ -0,0 +1,152 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*-
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
# shellcheck source=utils/lib.sh
|
||||||
|
source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
|
||||||
|
source_dot_config
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# config
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# name of https://images.linuxcontainers.org
|
||||||
|
LINUXCONTAINERS_ORG_NAME="${LINUXCONTAINERS_ORG_NAME:-images}"
|
||||||
|
HOST_PREFIX="${HOST_PREFIX:-searx}"
|
||||||
|
|
||||||
|
TEST_IMAGES=(
|
||||||
|
"$LINUXCONTAINERS_ORG_NAME:ubuntu/18.04" "ubu1804"
|
||||||
|
"$LINUXCONTAINERS_ORG_NAME:ubuntu/19.04" "ubu1904"
|
||||||
|
"$LINUXCONTAINERS_ORG_NAME:archlinux" "archlinux"
|
||||||
|
#"$LINUXCONTAINERS_ORG_NAME:fedora/31" "fedora31"
|
||||||
|
#"ubuntu-minimal:18.04" "ubu1804"
|
||||||
|
#"ubuntu-minimal:19.10" "ubu1910"
|
||||||
|
)
|
||||||
|
|
||||||
|
REMOTE_IMAGES=()
|
||||||
|
LOCAL_IMAGES=()
|
||||||
|
|
||||||
|
for ((i=0; i<${#TEST_IMAGES[@]}; i+=2)); do
|
||||||
|
REMOTE_IMAGES=("${REMOTE_IMAGES[@]}" "${TEST_IMAGES[i]}")
|
||||||
|
LOCAL_IMAGES=("${LOCAL_IMAGES[@]}" "${TEST_IMAGES[i+1]}")
|
||||||
|
done
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
usage() {
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
usage::
|
||||||
|
|
||||||
|
$(basename "$0") build [hosts]
|
||||||
|
$(basename "$0") delete [hosts]
|
||||||
|
|
||||||
|
build / delete
|
||||||
|
build and/or delete all LXC hosts
|
||||||
|
|
||||||
|
all LXC hosts:
|
||||||
|
${LOCAL_IMAGES[@]}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
[ ! -z "${1+x}" ] && err_msg "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
rst_title "LXC tooling box" part
|
||||||
|
|
||||||
|
required_commands lxc || exit
|
||||||
|
|
||||||
|
local _usage="unknown or missing $1 command $2"
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
--source-only) ;;
|
||||||
|
-h|--help) usage; exit 0;;
|
||||||
|
|
||||||
|
build)
|
||||||
|
sudo_or_exit
|
||||||
|
case $2 in
|
||||||
|
hosts) build_instances ;;
|
||||||
|
*) usage "$_usage"; exit 42;;
|
||||||
|
esac ;;
|
||||||
|
delete)
|
||||||
|
sudo_or_exit
|
||||||
|
case $2 in
|
||||||
|
hosts) delete_instances ;;
|
||||||
|
*) usage "$_usage"; exit 42;;
|
||||||
|
esac ;;
|
||||||
|
*)
|
||||||
|
usage "unknown or missing command $1"; exit 42;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
build_instances() {
|
||||||
|
rst_title "Build LXC instances"
|
||||||
|
lxc_copy_images_localy
|
||||||
|
lxc_init_containers
|
||||||
|
|
||||||
|
err_msg "WIP / sorry, not implemented yet :o"
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_instances() {
|
||||||
|
rst_title "Delete LXC instances"
|
||||||
|
echo -en "\\nLXC hosts(s)::\\n\\n ${LOCAL_IMAGES[*]}\\n" | $FMT
|
||||||
|
if ask_yn "Do you really want to delete all images"; then
|
||||||
|
lxc_delete_containers
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
lxc_copy_images_localy() {
|
||||||
|
echo
|
||||||
|
for ((i=0; i<${#TEST_IMAGES[@]}; i+=2)); do
|
||||||
|
if lxc image info "local:${TEST_IMAGES[i+1]}" &>/dev/null; then
|
||||||
|
info_msg "image ${TEST_IMAGES[i]} already copied --> ${TEST_IMAGES[i+1]}"
|
||||||
|
else
|
||||||
|
info_msg "copy image locally ${TEST_IMAGES[i]} --> ${TEST_IMAGES[i+1]}"
|
||||||
|
lxc image copy "${TEST_IMAGES[i]}" local: \
|
||||||
|
--alias "${TEST_IMAGES[i+1]}" prefix_stdout
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
#lxc image list local:
|
||||||
|
}
|
||||||
|
|
||||||
|
lxc_delete_images_localy() {
|
||||||
|
echo
|
||||||
|
for i in "${LOCAL_IMAGES[@]}"; do
|
||||||
|
info_msg "delete image 'local:$i'"
|
||||||
|
lxc image delete "local:$i"
|
||||||
|
done
|
||||||
|
#lxc image list local:
|
||||||
|
}
|
||||||
|
|
||||||
|
lxc_init_containers() {
|
||||||
|
echo
|
||||||
|
for i in "${LOCAL_IMAGES[@]}"; do
|
||||||
|
if lxc info "$HOST_PREFIX-$i" &>/dev/null; then
|
||||||
|
info_msg "conatiner '$HOST_PREFIX-$i' already exists"
|
||||||
|
else
|
||||||
|
info_msg "create conatiner instance: $HOST_PREFIX-$i"
|
||||||
|
lxc init "local:$i" "$HOST_PREFIX-$i"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
#lxc list "$HOST_PREFIX"
|
||||||
|
}
|
||||||
|
|
||||||
|
lxc_delete_containers() {
|
||||||
|
echo
|
||||||
|
for i in "${LOCAL_IMAGES[@]}"; do
|
||||||
|
if lxc info "$HOST_PREFIX-$i" &>/dev/null; then
|
||||||
|
info_msg "stop & delete instance '$HOST_PREFIX-$i'"
|
||||||
|
lxc stop "$HOST_PREFIX-$i" &>/dev/null
|
||||||
|
lxc delete "$HOST_PREFIX-$i" | prefix_stdout
|
||||||
|
else
|
||||||
|
warn_msg "instance '$HOST_PREFIX-$i' does not exist / can't delete :o"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
#lxc list "$HOST_PREFIX"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
main "$@"
|
||||||
|
# ----------------------------------------------------------------------------
|
Loading…
Reference in a new issue