summaryrefslogtreecommitdiff
path: root/roles/apps/nextcloud/templates/nextcloud-upgrade.j2
blob: 13178f0fa97cf137c302e43779bf1d8d9fa51834 (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
#!/bin/bash

INST_NAME="$1"
VERSION="$2"
if [ -z "$INST_NAME" ] || [ -z "$VERSION" ]; then
  echo "Usage: $0 <instance> <version>"
  exit 1
fi

set -eu

K8S_MANIFEST_D="/etc/kubernetes/manifests/"
K8S_MANIFEST_FILE="$K8S_MANIFEST_D/nextcloud-$INST_NAME.yml"
if [ ! -e "$K8S_MANIFEST_FILE" ]; then
  echo "could not find manifest file: $K8S_MANIFEST_FILE"
  exit 2
fi

TMP_D=$(mktemp -d -t nextcloud-upgrade.XXXXXXX)
function cleanup {
  rm -rf "$TMP_D"
}
trap cleanup EXIT

IMAGE_BUILD_D="{{ nextcloud_base_path }}/$INST_NAME/build"
IMAGE_NAME="nextcloud"
if [ -e "$IMAGE_BUILD_D/Dockerfile" ]; then
  ## this only works if docker is installed...
  echo "*** Building custom image"
  echo ""
  sed "0,/FROM \(.*\):.*/s//FROM \1:$VERSION/" -i "$IMAGE_BUILD_D/Dockerfile"
  IMAGE_NAME="nextcloud/$INST_NAME"
  docker build --rm --network host -t "$IMAGE_NAME:$VERSION" "$IMAGE_BUILD_D"
  echo ""
else
  echo "*** Pre-Pulling the image"
  echo ""
  crictl pull "docker.io/library/nextcloud:$VERSION"
  echo ""
fi
{% if nextcloud_zfs is defined %}

echo "*** creating ZFS snapshot"
echo ""

IMAGE_NAME_ESCAPED=${IMAGE_NAME/\//\\/}
CURRENT_VERSION=$(cat "$K8S_MANIFEST_FILE" | awk '/image: "'"$IMAGE_NAME_ESCAPED"':.*"/ { print($2) }' | tr -d '"' | cut -d ':' -f 2)
zfs snapshot "{{ nextcloud_zfs.pool }}/{{ nextcloud_zfs.name }}/$INST_NAME@upgrade_$CURRENT_VERSION-to-$VERSION""_$(date '+%Y-%m-%m_%H:%M:%S')"
{% endif %}

echo "*** Patching manifest file"
echo ""
sed "s#image: \"$IMAGE_NAME:.*\"#image: \"$IMAGE_NAME:$VERSION\"#" "$K8S_MANIFEST_FILE" > "$TMP_D/upgraded.yml"
set +e
diff -u "$K8S_MANIFEST_FILE" "$TMP_D/upgraded.yml"
if [ $? -eq 0 ]; then
  echo "patching file failed?"
  exit 2
fi
cat "$TMP_D/upgraded.yml" > "$K8S_MANIFEST_FILE"
echo ""

exit 0