diff options
author | Markus Heiser <markus.heiser@darmarit.de> | 2020-02-08 19:12:28 +0100 |
---|---|---|
committer | Markus Heiser <markus.heiser@darmarit.de> | 2020-02-08 19:12:28 +0100 |
commit | 7751b2955948664076409abaff4d4e4161a31c6f (patch) | |
tree | 517d939c08f9738dc67bdb2b3cb613541313ba92 /utils/lxc.sh | |
parent | 5c0f9c8c79f8eca72c206e2f9bb7c6d26bf80fa4 (diff) | |
download | searxng-7751b2955948664076409abaff4d4e4161a31c6f.tar.gz searxng-7751b2955948664076409abaff4d4e4161a31c6f.zip |
LXC: add LXC tooling box (initial, WIP)
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Diffstat (limited to 'utils/lxc.sh')
-rwxr-xr-x | utils/lxc.sh | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/utils/lxc.sh b/utils/lxc.sh new file mode 100755 index 000000000..d79262534 --- /dev/null +++ b/utils/lxc.sh @@ -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 "$@" +# ---------------------------------------------------------------------------- |