deploy.pl/_archive/remove.sh
2024-05-20 11:26:09 +00:00

105 lines
2.9 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (c) 2019 Mischa Peters <mischa @ openbsd.amsterdam>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
main () {
CONF_FILE="$PWD/_deploy.conf"
[ -f "$CONF_FILE" ] && . "$CONF_FILE"
file=${VMS}/$1
if [ -f "$file" ]; then
echo "reading $file"
. "$file"
backup_image "$file"
remove_user "$file"
move_file "$file"
else
echo "ERROR file doesn't exist: ${file}"
fi
}
check_instance() {
# Check if the instance name exists, otherwise return filename as VM.
# Takes vm*.txt and instance
# prints either filename or instance variable
if test -z "$2"
then echo "$1" | sed "s@^$VMS@@;s@^/@@;s/\\.txt$//"
else echo "$2"
fi
}
check_owner() {
# Check if the owner name exists, otherwise returns username.
# Takes username and owner
# prints either owner or username
if test -z "$2"
then echo "$1"
else echo "$2"
fi
}
check_format() {
# Check if the image format exists, otherwise returns img.
# Takes format
# prints either format or img
if test -z "$1"
then echo "${FORMAT}"
else echo "$1"
fi
}
backup_image() {
filename=$1
_instance=$(check_instance "$filename" "$instance")
_format=$(check_format "$format")
if [ -f "${IMAGES}/${_instance}.${_format}" ]; then
mv ${IMAGES}/${_instance}.${_format} ${IMAGES}/${_instance}.${_format}-backup
echo "vmm(4)/vmd(8) files moved: ${IMAGES}/${_instance}.${_format} ${IMAGES}/${_instance}.${_format}-backup"
else
echo "ERROR vmm(4)/vmd(8) files moved: ${IMAGES}/${_instance}.${_format} doesn't exist"
fi
}
remove_user() {
_owner=$(check_owner "$username" "$owner")
if [ -n "$_owner" ]; then
if grep -e "^${_owner}:" /etc/passwd > /dev/null; then
userdel -r "$_owner"
echo "userdel(8) removal: $_owner"
else
echo "ERROR userdel(8) removal: $_owner doesn't exist"
fi
if grep -e "^${_owner}:" /etc/group > /dev/null; then
groupdel "$_owner"
echo "groupdel(8) removal: $_owner"
else
echo "ERROR groupdel(8) removal: $_owner doesn't exist"
fi
fi
}
move_file() {
filename=$1
cp ${filename} ${filename}-backup
echo "cp(1): ${filename} ${filename}-backup"
mv ${filename} ${filename}.free
echo "mv(1): ${filename} ${filename}.free"
chown -R mischa:mischa ${filename}-backup ${filename}.free
}
main "$@"