blob: 62f6641e9439d6b63d59226bbdd020117accafb1 (
plain) (
blame)
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
|
#!/bin/bash
set -e
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
echo "Usage: $0 (preapre|finalize) <old-version> <new-version>"
exit 1
fi
COMMAND="$1"
OLD_VERSION="$2"
NEW_VERSION="$3"
POD_NAME="{{ nextcloud_instance }}-$(hostname)"
maintenance_mode() {
POD_ID=$(crictl pods --name "$POD_NAME" --state ready -q)
CONTAINER_ID=$(crictl ps --pod "$POD_ID" --name nextcloud -q)
crictl exec "$CONTAINER_ID" php -f /var/www/html/occ maintenance:mode "$1"
}
wait_for_cronjobs() {
POD_ID=$(crictl pods --name "$POD_NAME" --state ready -q)
CONTAINER_ID=$(crictl ps --pod "$POD_ID" --name nextcloud -q)
crictl exec "$CONTAINER_ID" bash -c 'echo -n "waiting for running cron script "; while [ -n "$(pgrep -a php | grep cron.php)" ]; do echo -n "."; sleep 1; done; echo ""'
}
wait_for_upgrade_complete() {
NEW_VERSION="$1"
set +e
echo -n "waiting for new version to be ready "
while true; do
POD_ID=$(crictl pods --name "$POD_NAME" --state ready -q)
if [ -z $POD_ID ]; then continue; fi
CONTAINER_ID=$(crictl ps --pod "$POD_ID" --name nextcloud -q)
if [ -z $CONTAINER_ID ]; then continue; fi
STATUS_OUTPUT=$(crictl exec "$CONTAINER_ID" php -f /var/www/html/occ status -n --no-warnings --output plain)
if [ $? -eq 0 ]; then
RUNNING_VERSION=$(echo "$STATUS_OUTPUT" | awk -F : '/versionstring/ { print($2) }' | tr -d ' ')
if [ "$RUNNING_VERSION" = "$NEW_VERSION" ]; then
break
fi
echo -n "."
fi
sleep 1
done
echo ""
set -e
crictl exec "$CONTAINER_ID" bash -c 'echo -n "waiting for apache to start "; while [ -z "$(pgrep apache2)" ]; do echo -n "."; sleep 1; done; echo ""'
}
storage_snapshot() {
OLD_VERSION="$1"
NEW_VERSION="$2"
{% if nextcloud_instances[nextcloud_instance].storage.type == 'zfs' %}
ZFS_VOLUME=$(findmnt -no source -T "{{ nextcloud_instance_basepath }}")
echo "creating snapshot for zfs volume: $ZFS_VOLUME"
zfs snapshot "$ZFS_VOLUME@upgrade_$OLD_VERSION-to-$NEW_VERSION""_$(date '+%Y-%m-%m_%H:%M:%S')"
{% endif %}
}
case "$COMMAND" in
prepare)
maintenance_mode --on
wait_for_cronjobs
storage_snapshot "$OLD_VERSION" "$NEW_VERSION"
;;
finalize)
wait_for_upgrade_complete "$NEW_VERSION"
maintenance_mode --off
;;
*)
echo "unknown command: $COMMAND, must be prepare or finalize"
exit 1
;;
esac
|