summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rwxr-xr-xlib/container/auto7
-rwxr-xr-xlib/container/create12
-rwxr-xr-xlib/container/list14
-rwxr-xr-xlib/container/top113
4 files changed, 135 insertions, 11 deletions
diff --git a/lib/container/auto b/lib/container/auto
index 45aa68f..cbacad2 100755
--- a/lib/container/auto
+++ b/lib/container/auto
@@ -104,7 +104,12 @@ esac
for FILE in "${CONFIG}"/*.conf
do
- if grep -Eqs "^ *cnt.auto=true" "${FILE}" || grep -Eqs "^ *cnt.auto=${HOST}" "${FILE}"
+ if grep -Eqs "^ *cnt.auto=force-true" "${FILE}"
+ then
+ OPTIONS="${OPTIONS} -f"
+ fi
+
+ if grep -Eqs "^ *cnt.auto=(force-true|true)" "${FILE}" && grep -Eqs "^ *cnt.container-server=${HOST}" "${FILE}"
then
CONTAINER="$(basename ${FILE} .conf)"
diff --git a/lib/container/create b/lib/container/create
index 1a6f4d5..570492f 100755
--- a/lib/container/create
+++ b/lib/container/create
@@ -27,7 +27,7 @@ SCRIPTS="/usr/share/container-tools/scripts"
Parameters ()
{
- GETOPT_LONGOPTIONS="name:,cnt.auto:,cnt.overlay:,bind:,bind-ro:,capability:,drop-capability:script:,"
+ GETOPT_LONGOPTIONS="name:,cnt.container-server:,cnt.overlay:,bind:,bind-ro:,capability:,drop-capability:script:,"
GETOPT_OPTIONS="n:,b:,c:,d:,s:,"
PARAMETERS="$(getopt --longoptions ${GETOPT_LONGOPTIONS} --name=${COMMAND} --options ${GETOPT_OPTIONS} --shell sh -- ${@})"
@@ -53,6 +53,11 @@ Parameters ()
shift 2
;;
+ --cnt.container-server)
+ CNT_CONTAINER_SERVER="${2}"
+ shift 2
+ ;;
+
--cnt.overlay)
CNT_OVERLAY="${2}"
shift 2
@@ -98,7 +103,7 @@ Parameters ()
Usage ()
{
- echo "Usage: container ${COMMAND} -n|--name NAME [--cnt.auto=true|false|FQDN] [--cnt.overlay=DIRECTORY_LOWER:DIRECTORY_UPPER:DIRECTORY_WORK:DIRECTORY_MERGED] [-b|--bind DIRECTORY:DIRECTORY[:OPTIONS]] [--bind-ro DIRECTORY:DIRECTORY[:OPTIONS]] [-c|--capability CAPABILITY[,CAPABILITY]] [-d|--drop-capability DROP_CAPABILITY[,DROP_CAPABILITY]] [-s|--script SCRIPT] [-- SCRIPT_OPTIONS]" >&2
+ echo "Usage: container ${COMMAND} -n|--name NAME [--cnt.container-server=true|false|FQDN] [--cnt.overlay=DIRECTORY_LOWER:DIRECTORY_UPPER:DIRECTORY_WORK:DIRECTORY_MERGED] [-b|--bind DIRECTORY:DIRECTORY[:OPTIONS]] [--bind-ro DIRECTORY:DIRECTORY[:OPTIONS]] [-c|--capability CAPABILITY[,CAPABILITY]] [-d|--drop-capability DROP_CAPABILITY[,DROP_CAPABILITY]] [-s|--script SCRIPT] [-- SCRIPT_OPTIONS]" >&2
exit 1
}
@@ -145,7 +150,7 @@ else
fi
fi
-CNT_AUTO="${CNT_AUTO:-$(hostname -f)}"
+CNT_CONTAINER_SERVER="${CNT_CONTAINER_SERVER:-$(hostname -f)}"
# Pre hooks
for FILE in "${HOOKS}/pre-${COMMAND}".* "${HOOKS}/${NAME}.pre-${COMMAND}"
@@ -205,6 +210,7 @@ fi
mkdir -p "${CONFIG}"
sed -e "s|@CNT_AUTO@|${CNT_AUTO}|g" \
+ -e "s|@CNT_CONTAINER_SERVER@|${CNT_CONTAINER_SERVER}|g" \
-e "s|@CNT_NETWORK_BRIDGE@|${CNT_NETWORK_BRIDGE}|g" \
-e "s|@CNT_OVERLAY@|${CNT_OVERLAY}|g" \
-e "s|@NAME@|${NAME}|g" \
diff --git a/lib/container/list b/lib/container/list
index 9bf61c4..cd88475 100755
--- a/lib/container/list
+++ b/lib/container/list
@@ -130,7 +130,7 @@ List ()
{
case "${FORMAT}" in
cli)
- printf "%-80s %-29s\n" "${STATUS} ${BLUE}${CONTAINER}${NORMAL}" "${YELLOW}${ADDRESS}${NORMAL}"
+ printf "%1s %-74s %-19s\n" "${STATUS}" "${BLUE}${CONTAINER}${NORMAL}" "${YELLOW}${ADDRESS}${NORMAL}"
;;
csv)
@@ -222,7 +222,7 @@ case "${FORMAT}" in
NORMAL="$(tput sgr0)"
cat << EOF
-${WHITE} ${NORMAL} Container IPv4 Address(es)
+${WHITE} ${NORMAL} Container IPv4 Address(es)
--------------------------------------------------------------------------------
EOF
@@ -329,10 +329,10 @@ do
if [ -e "${CONFIG}/${CONTAINER}.conf" ]
then
- AUTO="$(awk -F= '/^cnt.auto=/ { print $2 }' ${CONFIG}/${CONTAINER}.conf)"
- AUTO="${AUTO:-false}"
+ CONTAINER_SERVER="$(awk -F= '/^cnt.container-server=/ { print $2 }' ${CONFIG}/${CONTAINER}.conf)"
+ CONTAINER_SERVER="${CONTAINER_SERVER:-false}"
- case "${AUTO}" in
+ case "${CONTAINER_SERVER}" in
${HOST}|true)
;;
@@ -347,7 +347,7 @@ do
case "${STATE}" in
running)
STATE="started"
- STATUS="${GREEN}✔${NORMAL}"
+ STATUS="${GREEN}●${NORMAL}"
;;
other)
@@ -356,7 +356,7 @@ do
*)
STATE="stopped"
- STATUS="${RED}✘${NORMAL}"
+ STATUS="${RED}●${NORMAL}"
;;
esac
diff --git a/lib/container/top b/lib/container/top
new file mode 100755
index 0000000..0ff1834
--- /dev/null
+++ b/lib/container/top
@@ -0,0 +1,113 @@
+#!/bin/sh
+
+# container-tools - Manage systemd-nspawn containers
+# Copyright (C) 2014-2017 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+Parameters ()
+{
+ GETOPT_LONGOPTIONS="delay:,"
+ GETOPT_OPTIONS="d:,"
+
+ PARAMETERS="$(getopt --longoptions ${GETOPT_LONGOPTIONS} --name=${COMMAND} --options ${GETOPT_OPTIONS} --shell sh -- ${@})"
+
+ if [ "${?}" != "0" ]
+ then
+ echo "'${COMMAND}': getopt exit" >&2
+ exit 1
+ fi
+
+ eval set -- "${PARAMETERS}"
+
+ while true
+ do
+ case "${1}" in
+ -d|--delay)
+ DELAY="${2}"
+ shift 2
+ ;;
+
+ --)
+ shift 1
+ break
+ ;;
+
+ *)
+ echo "'${COMMAND}': getopt error" >&2
+ exit 1
+ ;;
+ esac
+ done
+}
+
+Usage ()
+{
+ echo "Usage: container ${COMMAND} [-d|--delay DELAY]" >&2
+ exit 1
+}
+
+Parameters "${@}"
+
+DELAY="${DELAY:-1}"
+HOST="$(hostname -f)"
+
+# Pre hooks
+for FILE in "${HOOKS}/pre-${COMMAND}".* "${HOOKS}/${NAME}.pre-${COMMAND}"
+do
+ if [ -x "${FILE}" ]
+ then
+ "${FILE}"
+ fi
+done
+
+# Run
+Top ()
+{
+ HOME="$(tput cup 0 0)"
+ ED="$(tput ed)"
+ EL="$(tput el)"
+
+ printf '%s%s' "${HOME}" "${ED}"
+
+ while true
+ do
+ ROWS="$(tput lines)"
+ COLS="$(tput cols)"
+ CMD="${@}"
+
+ ${SHELL:=sh} -c "${CMD}" | head -n ${ROWS} | while IFS= read LINE
+ do
+ printf '%-*.*s%s\n' ${COLS} ${COLS} "${LINE}" "${EL}"
+ done
+
+ printf '%s%s' "${ED}" "${HOME}"
+ sleep ${DELAY}
+ done
+}
+
+trap 'clear' EXIT HUP INT QUIT TERM
+
+Top "container list && printf '%-59s %-19s\n' \" Host: ${HOST}\" \"\$(date +%Y-%m-%d\ %H:%M:%S)\""
+
+# Post hooks
+for FILE in "${HOOKS}/post-${COMMAND}".* "${HOOKS}/${NAME}.post-${COMMAND}"
+do
+ if [ -x "${FILE}" ]
+ then
+ "${FILE}"
+ fi
+done