#!/bin/bash INST_NAME="$1" VERSION="$2" if [ -z "$INST_NAME" ] || [ -z "$VERSION" ]; then echo "Usage: $0 " exit 1 fi set -eu K8S_CONFIG_HASH_D="/etc/kubernetes/config-hashes/" K8S_CONFIG_HASH_FILE="$K8S_CONFIG_HASH_D/nextcloud-$INST_NAME.yml" 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="{{ elevate_media_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 echo "*** Rebuilding config-hash file" echo "" cat "$K8S_CONFIG_HASH_FILE" | grep '^/.*:' | sed 's/:$//' | xargs sha256sum | awk '{ print($2":\n checksum: "$1) }' > "$TMP_D/config-hash.yml" CONFIG_HASH=$(sha256sum "$TMP_D/config-hash.yml" | awk '{ print($1) }') echo "*** Patching manifest file" echo "" sed -e "s#image: \"$IMAGE_NAME:.*\"#image: \"$IMAGE_NAME:$VERSION\"#" -e "s#config-hash: \".*\"#config-hash: \"$CONFIG_HASH\"#" "$K8S_MANIFEST_FILE" > "$TMP_D/manifest.yml" set +e diff -u "$K8S_MANIFEST_FILE" "$TMP_D/manifest.yml" if [ $? -eq 0 ]; then echo "patching file failed?" exit 2 fi cat "$TMP_D/config-hash.yml" > "$K8S_CONFIG_HASH_FILE" cat "$TMP_D/manifest.yml" > "$K8S_MANIFEST_FILE" echo "" exit 0