mirror of
https://github.com/balena-io/open-balena.git
synced 2024-12-25 08:21:05 +00:00
78 lines
2.6 KiB
Plaintext
78 lines
2.6 KiB
Plaintext
|
#!/bin/sh
|
||
|
|
||
|
source "${BASH_SOURCE%/*}/logger.sh"
|
||
|
source "${BASH_SOURCE%/*}/migrate-registry-storage"
|
||
|
|
||
|
# This script takes a v1.x.x install and updates the compose stack to use S3 as your
|
||
|
# registry storage.
|
||
|
|
||
|
source "${BASH_SOURCE%/*}/_realpath"
|
||
|
|
||
|
DIR="$(dirname $(realpath "$0"))"
|
||
|
BASE_DIR="$(dirname "${DIR}")"
|
||
|
CONFIG_DIR="${BASE_DIR}/config"
|
||
|
CONFIG_FILE="${CONFIG_DIR}/activate"
|
||
|
|
||
|
# Step 1. Make sure a config exists...
|
||
|
[ -f "${CONFIG_FILE}" ] || die "Unable to find existing config!";
|
||
|
|
||
|
info "Preparing to upgrade..."
|
||
|
source "${CONFIG_FILE}"
|
||
|
|
||
|
while getopts "f" opt; do
|
||
|
case "${opt}" in
|
||
|
f)
|
||
|
warn "Forcing upgrade! I hope you know what you're doing..."
|
||
|
FORCE_UPGRADE=1
|
||
|
;;
|
||
|
*)
|
||
|
echo "Invalid argument: ${OPTARG}"
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
shift $((OPTIND-1))
|
||
|
|
||
|
# Step 2. Check if the S3 configuration already exists...
|
||
|
upgrade_required () {
|
||
|
[ -z "${OPENBALENA_REGISTRY2_S3_BUCKET}" ] || return 1;
|
||
|
[ -z "${OPENBALENA_S3_ACCESS_KEY}" ] || return 1;
|
||
|
[ -z "${OPENBALENA_S3_ENDPOINT}" ] || return 1;
|
||
|
[ -z "${OPENBALENA_S3_REGION}" ] || return 1;
|
||
|
[ -z "${OPENBALENA_S3_SECRET_KEY}" ] || return 1;
|
||
|
}
|
||
|
upgrade_required || die_unless_forced "${FORCE_UPGRADE}" "Configuration may already be using S3 for Registry storage!"
|
||
|
|
||
|
# Step 3. Create missing S3 configuration...
|
||
|
randstr() {
|
||
|
LC_CTYPE=C tr -dc A-Za-z0-9 < /dev/urandom | fold -w "${1:-32}" | head -n 1
|
||
|
}
|
||
|
|
||
|
upsert_config () {
|
||
|
var="${1}"
|
||
|
value="${2}"
|
||
|
|
||
|
if [ -z "${!var}" ]; then
|
||
|
echo "export ${1}=${2}" >> "${CONFIG_FILE}"
|
||
|
else
|
||
|
sed -i '' "s~export ${1}=.*~export ${1}=${2}~" "${CONFIG_FILE}"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
upsert_config "OPENBALENA_REGISTRY2_S3_BUCKET" "registry-data" || warn "Failed to update config value OPENBALENA_REGISTRY2_S3_BUCKET"
|
||
|
upsert_config "OPENBALENA_S3_ACCESS_KEY" "$(randstr 32)" || warn "Failed to update config value OPENBALENA_S3_ACCESS_KEY"
|
||
|
upsert_config "OPENBALENA_S3_ENDPOINT" "https://s3.${OPENBALENA_HOST_NAME}" || warn "Failed to update config value OPENBALENA_S3_ENDPOINT"
|
||
|
upsert_config "OPENBALENA_S3_REGION" "us-east-1" || warn "Failed to update config value OPENBALENA_S3_REGION"
|
||
|
upsert_config "OPENBALENA_S3_SECRET_KEY" "$(randstr 32)" || warn "Failed to update config value OPENBALENA_S3_SECRET_KEY"
|
||
|
|
||
|
# Step 4. Migrate Registry data to S3...
|
||
|
info "Copying data from the Registry volume to the S3 volume..."
|
||
|
migrate_data_to_s3 "registry-data"
|
||
|
case $? in
|
||
|
1) die "Invalid bucket name";;
|
||
|
2) die "Unable to find the running Registry or S3 containers";;
|
||
|
3) die "Unable to determine the data volumes for the Registry or S3 containers";;
|
||
|
*) info "Registry data copied"
|
||
|
;;
|
||
|
esac
|
||
|
info "Upgrade complete"
|