summaryrefslogtreecommitdiffstats
path: root/remove.sh
blob: 8493419608c899885cd04887d17738e221c5b89c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/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 "$@"