mirror of
https://github.com/balena-io/open-balena.git
synced 2024-12-30 02:28:52 +00:00
2a7d0687a2
Update open-balena-s3 to 2.8.3 This makes new installations of openBalena use the S3 container as a storage backend for the Registry service by default. Existing installs should not be affected. Change-type: major Signed-off-by: Rich Bayliss <rich@balena.io>
78 lines
2.6 KiB
Bash
Executable File
78 lines
2.6 KiB
Bash
Executable File
#!/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" |