#!/bin/sh # # Copyright (c) 2019 Mischa Peters # # 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 "$@"