on master help sign in
LXC: add LXC tooling box (initial, WIP)

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>

commit7751b2955948664076409abaff4d4e4161a31c6f authorMarkus Heiser <markus.heiser@darmarit.de> dateSat 8 Feb 2020, 19:12 (7 years ago) parent5c0f9c8
2 files changed+153
Makefile+1 utils/lxc.sh+152
Makefile+1
@@ -75,6 +75,7 @@ test: test.pep8 test.unit test.sh test.robot
7575 - make pylint
7676
7777test.sh:
78+ shellcheck -x utils/lxc.sh
7879 shellcheck -x utils/lib.sh
7980 shellcheck -x utils/filtron.sh
8081 shellcheck -x utils/searx.sh
utils/lxc.shnew file+152
@@ -0,0 +1,152 @@
1+#!/usr/bin/env bash
2+# -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*-
3+# SPDX-License-Identifier: AGPL-3.0-or-later
4+
5+# shellcheck source=utils/lib.sh
6+source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
7+source_dot_config
8+
9+# ----------------------------------------------------------------------------
10+# config
11+# ----------------------------------------------------------------------------
12+
13+# name of https://images.linuxcontainers.org
14+LINUXCONTAINERS_ORG_NAME="${LINUXCONTAINERS_ORG_NAME:-images}"
15+HOST_PREFIX="${HOST_PREFIX:-searx}"
16+
17+TEST_IMAGES=(
18+ "$LINUXCONTAINERS_ORG_NAME:ubuntu/18.04" "ubu1804"
19+ "$LINUXCONTAINERS_ORG_NAME:ubuntu/19.04" "ubu1904"
20+ "$LINUXCONTAINERS_ORG_NAME:archlinux" "archlinux"
21+ #"$LINUXCONTAINERS_ORG_NAME:fedora/31" "fedora31"
22+ #"ubuntu-minimal:18.04" "ubu1804"
23+ #"ubuntu-minimal:19.10" "ubu1910"
24+)
25+
26+REMOTE_IMAGES=()
27+LOCAL_IMAGES=()
28+
29+for ((i=0; i<${#TEST_IMAGES[@]}; i+=2)); do
30+ REMOTE_IMAGES=("${REMOTE_IMAGES[@]}" "${TEST_IMAGES[i]}")
31+ LOCAL_IMAGES=("${LOCAL_IMAGES[@]}" "${TEST_IMAGES[i+1]}")
32+done
33+
34+# ----------------------------------------------------------------------------
35+usage() {
36+# ----------------------------------------------------------------------------
37+
38+ cat <<EOF
39+
40+usage::
41+
42+ $(basename "$0") build [hosts]
43+ $(basename "$0") delete [hosts]
44+
45+build / delete
46+ build and/or delete all LXC hosts
47+
48+all LXC hosts:
49+ ${LOCAL_IMAGES[@]}
50+
51+EOF
52+ [ ! -z "${1+x}" ] && err_msg "$1"
53+}
54+
55+main() {
56+ rst_title "LXC tooling box" part
57+
58+ required_commands lxc || exit
59+
60+ local _usage="unknown or missing $1 command $2"
61+
62+ case $1 in
63+ --source-only) ;;
64+ -h|--help) usage; exit 0;;
65+
66+ build)
67+ sudo_or_exit
68+ case $2 in
69+ hosts) build_instances ;;
70+ *) usage "$_usage"; exit 42;;
71+ esac ;;
72+ delete)
73+ sudo_or_exit
74+ case $2 in
75+ hosts) delete_instances ;;
76+ *) usage "$_usage"; exit 42;;
77+ esac ;;
78+ *)
79+ usage "unknown or missing command $1"; exit 42;;
80+ esac
81+}
82+
83+build_instances() {
84+ rst_title "Build LXC instances"
85+ lxc_copy_images_localy
86+ lxc_init_containers
87+
88+ err_msg "WIP / sorry, not implemented yet :o"
89+}
90+
91+delete_instances() {
92+ rst_title "Delete LXC instances"
93+ echo -en "\\nLXC hosts(s)::\\n\\n ${LOCAL_IMAGES[*]}\\n" | $FMT
94+ if ask_yn "Do you really want to delete all images"; then
95+ lxc_delete_containers
96+ fi
97+}
98+
99+lxc_copy_images_localy() {
100+ echo
101+ for ((i=0; i<${#TEST_IMAGES[@]}; i+=2)); do
102+ if lxc image info "local:${TEST_IMAGES[i+1]}" &>/dev/null; then
103+ info_msg "image ${TEST_IMAGES[i]} already copied --> ${TEST_IMAGES[i+1]}"
104+ else
105+ info_msg "copy image locally ${TEST_IMAGES[i]} --> ${TEST_IMAGES[i+1]}"
106+ lxc image copy "${TEST_IMAGES[i]}" local: \
107+ --alias "${TEST_IMAGES[i+1]}" prefix_stdout
108+ fi
109+ done
110+ #lxc image list local:
111+}
112+
113+lxc_delete_images_localy() {
114+ echo
115+ for i in "${LOCAL_IMAGES[@]}"; do
116+ info_msg "delete image 'local:$i'"
117+ lxc image delete "local:$i"
118+ done
119+ #lxc image list local:
120+}
121+
122+lxc_init_containers() {
123+ echo
124+ for i in "${LOCAL_IMAGES[@]}"; do
125+ if lxc info "$HOST_PREFIX-$i" &>/dev/null; then
126+ info_msg "conatiner '$HOST_PREFIX-$i' already exists"
127+ else
128+ info_msg "create conatiner instance: $HOST_PREFIX-$i"
129+ lxc init "local:$i" "$HOST_PREFIX-$i"
130+ fi
131+ done
132+ #lxc list "$HOST_PREFIX"
133+}
134+
135+lxc_delete_containers() {
136+ echo
137+ for i in "${LOCAL_IMAGES[@]}"; do
138+ if lxc info "$HOST_PREFIX-$i" &>/dev/null; then
139+ info_msg "stop & delete instance '$HOST_PREFIX-$i'"
140+ lxc stop "$HOST_PREFIX-$i" &>/dev/null
141+ lxc delete "$HOST_PREFIX-$i" | prefix_stdout
142+ else
143+ warn_msg "instance '$HOST_PREFIX-$i' does not exist / can't delete :o"
144+ fi
145+ done
146+ #lxc list "$HOST_PREFIX"
147+}
148+
149+
150+# ----------------------------------------------------------------------------
151+main "$@"
152+# ----------------------------------------------------------------------------