This repository has been archived by the owner on Jul 15, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
vzprestore.sh
executable file
·98 lines (87 loc) · 2.2 KB
/
vzprestore.sh
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
#!/bin/bash
# DEFAULTS
SOURCE="/vz/backup"
RSYNC_OPTS="$RSYNC_OPTS"
TEMPLATES="yes"
RESTORE_VES=""
LIST_BACKUPS="no"
RESTORE_SET="."
# COMMANDLINE PARSING
shopt -s extglob
for param in "$@"; do
case $param in
-h|--help)
echo "Usage: $0 [--source=<backup-source>] [--templates=<yes|no>] [--list-backups] [--backup-set=<backup-set>] [--all or VEIDs]"
echo "Defaults:"
echo "- --source=$SOURCE"
echo "- --templates=$TEMPLATES"
exit 0
;;
--source=*)
SOURCE=${param#*=}
;;
--templates=+(yes|no))
TEMPLATES=${param#*=}
;;
--list-backups)
LIST_BACKUPS="yes"
;;
--all)
RESTORE_VES="all"
;;
--backup-set=*)
RESTORE_SET=${param#*=}
;;
+([0-9]))
test "$RESTORE_VES" = "" && RESTORE_VES="$RESTORE_VES $param"
;;
esac
done
shopt -u extglob
# CHECKS
if [ "$RESTORE_VES" = "" ] && [ "$LIST_BACKUPS" = "no" ]; then
echo "No VEs to restore given.."
exit 1
fi
if ! which vzctl &>/dev/null; then
echo "Couldn't find vzctl in \$PATH. Are you sure it's there?"
exit 1
fi
# FUNCTIONS
function _list_backups {
echo "- Set '${2/^\.\$/current}'"
CURRENT_SET="$( rsync $RSYNC_OPTS $1/$2/$3 | grep -oE '[0-9]+$' )"
if [ "$CURRENT_SET" != "" ]; then
for VEID in $CURRENT_SET; do
echo "-- $VEID"
done
else
echo "-- set is empty."
fi
}
# SCRIPT
VE_PRIVATE="$( source /etc/vz/vz.conf; echo $VE_PRIVATE )"
if [ "$LIST_BACKUPS" = "yes" ]; then
echo "Available Backups:"
_list_backups $SOURCE . $VE_PRIVATE
BACKUP_SETS="$( rsync $RSYNC_OPTS $SOURCE | grep -oE '[0-9]+\.[0-9]+\.[0-9]+$' )"
if [ "$BACKUP_SETS" != "" ]; then
for BACKUP_SET in $BACKUP_SETS; do
echo
_list_backups $SOURCE $BACKUP_SET $VE_PRIVATE
done
fi
exit 0
fi
if [ "$RESTORE_VES" = "all" ]; then
RESTORE_SOURCES="$RESTORE_SOURCES $SOURCE/$RESTORE_SET/$VE_PRIVATE"
else
for VEID in $RESTORE_VES; do
RESTORE_SOURCES="$RESTORE_SOURCES $SOURCE/$RESTORE_SET/$VE_PRIVATE/$VEID"
done
fi
rsync -avz $RSYNC_OPTS $RESTORE_SOURCES $VE_PRIVATE
if [ "$TEMPLATES" = "yes" ]; then
TEMPLATE_DIR=$( source /etc/vz/vz.conf; echo $TEMPLATE )
rsync -avz $RSYNC_OPTS $SOURCE/$RESTORE_SET/$TEMPLATE_DIR/ $TEMPLATE_DIR
fi