summaryrefslogtreecommitdiffstats
path: root/lib/container/remove
diff options
context:
space:
mode:
Diffstat (limited to 'lib/container/remove')
-rwxr-xr-xlib/container/remove257
1 files changed, 0 insertions, 257 deletions
diff --git a/lib/container/remove b/lib/container/remove
deleted file mode 100755
index 75ebd60..0000000
--- a/lib/container/remove
+++ /dev/null
@@ -1,257 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
-#
-# SPDX-License-Identifier: GPL-3.0+
-#
-# 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
-
-PROJECT="open-infrastructure"
-PROGRAM="container"
-COMMAND="$(basename ${0})"
-
-CONFIG="/etc/${PROJECT}/${PROGRAM}/config"
-HOOKS="/etc/${PROJECT}/${PROGRAM}/hooks"
-MACHINES="/var/lib/machines"
-
-Parameters ()
-{
- OPTIONS_ALL=""
-
- GETOPT_LONGOPTIONS="name:,allow-stop,force,verbose,"
- GETOPT_OPTIONS="n:,f,v,"
-
- 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
- -n|--name)
- NAME="${2}"
- shift 2
- ;;
-
- --allow-stop)
- ALLOW_STOP="true"
- shift 1
-
- OPTIONS_ALL="${OPTIONS_ALL} --allow-stop"
- ;;
-
- -f|--force)
- FORCE="true"
- shift 1
-
- OPTIONS_ALL="${OPTIONS_ALL} --force"
- ;;
-
- -v|--verbose)
- VERBOSE="true"
- shift 1
-
- OPTIONS_ALL="${OPTIONS_ALL} --verbose"
- ;;
-
- --)
- shift 1
- break
- ;;
-
- *)
- echo "'${COMMAND}': getopt error" >&2
- exit 1
- ;;
- esac
- done
-}
-
-Usage ()
-{
- echo "Usage: ${PROGRAM} ${COMMAND} -n|--name NAME [--allow-stop] [-f|--force] [-v|--verbose]" >&2
- exit 1
-}
-
-Rmdir ()
-{
- DIRECTORIES="${@}"
-
- for DIRECTORY in ${DIRECTORIES}
- do
- PARENT_DIRECTORY="/$(echo ${DIRECTORY} | cut -d / -f 2)"
-
- if [ "${PARENT_DIRECTORY}" != "${DIRECTORY}" ]
- then
- # the directory is at least two levels down from /
- cd "${PARENT_DIRECTORY}"
-
- CRUFT="$(echo ${DIRECTORY} | cut -d / -f 3-)"
- rmdir --ignore-fail-on-non-empty --parents "${CRUFT}" > /dev/null 2>&1 || true
-
- cd "${OLDPWD}"
- fi
- done
-}
-
-Parameters "${@}"
-
-if [ -z "${NAME}" ]
-then
- Usage
-fi
-
-case "${NAME}" in
- ALL)
- NAMES="$(${PROGRAM} list --format shell --stopped)"
-
- for NAME in ${NAMES}
- do
- ${PROGRAM} remove --name ${NAME} ${OPTIONS_ALL} || true
- done
-
- exit 0
- ;;
-esac
-
-if [ ! -e "${MACHINES}/${NAME}" ] && [ ! -e "${CONFIG}/${NAME}.conf" ]
-then
- echo "'${NAME}': no such container" >&2
- exit 1
-fi
-
-STATE="$(machinectl show ${NAME} 2>&1 | awk -FState= '/^State=/ { print $2 }')"
-
-case "${STATE}" in
- running)
- case "${ALLOW_STOP}" in
- true)
- echo "'${NAME}': container is started, stopping it now" >&2
- ${PROGRAM} stop -n ${NAME}
- ;;
-
- *)
- echo "'${NAME}': container is started" >&2
- exit 1
- ;;
- esac
- ;;
-esac
-
-case "${FORCE}" in
- true)
- ;;
-
- *)
- echo -n "'${NAME}': remove container '${NAME}' [y|N]? "
- read FORCE
-
- FORCE="$(echo ${FORCE} | tr '[A-Z]' '[a-z]')"
-
- case "${FORCE}" in
- y|yes)
- ;;
-
- *)
- exit 1
- ;;
- esac
- ;;
-esac
-
-case "${VERBOSE}" in
- true)
- RM_OPTIONS="--verbose"
- ;;
-
- *)
- RM_OPTIONS=""
- ;;
-esac
-
-# Pre hooks
-for FILE in "${HOOKS}/pre-${COMMAND}".* "${HOOKS}/${NAME}.pre-${COMMAND}"
-do
- if [ -x "${FILE}" ]
- then
- "${FILE}"
- fi
-done
-
-# data
-if [ -e "${CONFIG}/${NAME}.conf" ]
-then
- # Removing rw bind mounts
- BIND="$(awk -Fbind= '/^bind=/ { print $2 }' ${CONFIG}/${NAME}.conf)"
-
- if [ -n "${BIND}" ]
- then
- BINDS="$(echo ${BIND} | sed -e 's|;| |g')"
-
- for BIND in ${BINDS}
- do
- DIRECTORY="$(echo ${BIND} | awk -F: '{ print $1 }')"
-
- Rmdir "${DIRECTORY}"
- done
- fi
-
- # Removing ro bind mounts
- BIND_RO="$(awk -Fbind-ro= '/^bind-ro=/ { print $2 }' ${CONFIG}/${NAME}.conf)"
-
- if [ -n "${BIND_RO}" ]
- then
- BINDS_RO="$(echo ${BIND_RO} | sed -e 's|;| |g')"
-
- for BIND_RO in ${BINDS_RO}
- do
- DIRECTORY="$(echo ${BIND_RO} | awk -F: '{ print $1 }')"
-
- Rmdir "${DIRECTORY}"
- done
- fi
-fi
-
-# Run
-case "${VERBOSE}" in
- true)
- echo -n "Removing container ${NAME}..."
- ;;
-esac
-
-rm --preserve-root --one-file-system -rf ${RM_OPTIONS} "${MACHINES}/${NAME}"
-rm -f ${RM_OPTIONS} "${CONFIG}/${NAME}.conf"
-
-case "${VERBOSE}" in
- true)
- echo " done."
- ;;
-esac
-
-# Post hooks
-for FILE in "${HOOKS}/post-${COMMAND}".* "${HOOKS}/${NAME}.post-${COMMAND}"
-do
- if [ -x "${FILE}" ]
- then
- "${FILE}"
- fi
-done