From 620c7cd4ad9cc8b8a79340436d6af7a33185e200 Mon Sep 17 00:00:00 2001 From: kjwon15 Date: Fri, 3 May 2019 13:57:14 +0900 Subject: [PATCH 1/3] Do pg_upgrade after changing postgres version --- subcommands/upgrade | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/subcommands/upgrade b/subcommands/upgrade index 12340036..70927358 100755 --- a/subcommands/upgrade +++ b/subcommands/upgrade @@ -5,6 +5,23 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" source "$PLUGIN_AVAILABLE_PATH/ps/functions" +get_simple_version() { + # 9.2.4 => 9.2 + # 9.2 => 9.2 + # 11.2 => 11 + # 11 => 11 + local version=$1 + IFS=. read -r -a arr <<< "$version" + + if [ "${arr[0]}" -lt 10 ]; then + echo "${arr[0]}.${arr[1]}" + else + echo "${arr[0]}" + fi + +} + + service-upgrade-cmd() { #E you can upgrade an existing service to a new image or image-version #E dokku $PLUGIN_COMMAND_PREFIX:upgrade lolipop @@ -34,7 +51,12 @@ service-upgrade-cmd() { return fi - dokku_log_info2 "Upgrading $SERVICE to $NEW_PLUGIN_IMAGE_TAG" + local OLD_IMAGE_TAG + local OLD_IMAGE_VERSION + OLD_IMAGE_TAG="$(service_version "$SERVICE")" + OLD_IMAGE_VERSION=${OLD_IMAGE_TAG#*:} + + dokku_log_info2 "Upgrading $SERVICE from $OLD_IMAGE_TAG to $NEW_PLUGIN_IMAGE_TAG" if [[ "$SERVICE_RESTART_APPS" == "true" ]]; then dokku_log_info2 "Stopping all linked services" for app in $(service_linked_apps "$SERVICE"); do @@ -45,6 +67,27 @@ service-upgrade-cmd() { dokku_log_info2 "Stopping $SERVICE" service_container_rm "$SERVICE" + + # Migrate + local old_version + local new_version + local data_dir="$PLUGIN_DATA_ROOT/$SERVICE/data" + local data_old="$PLUGIN_DATA_ROOT/$SERVICE/data_old" + old_version=$(get_simple_version "$OLD_IMAGE_VERSION") + new_version=$(get_simple_version "$PLUGIN_IMAGE_VERSION") + + dokku_log_info2 "Migrating $SERVICE from $old_version to $new_version" + + mv "$data_dir" "$data_old" + + docker run --rm \ + -v "$data_old:/var/lib/postgresql/${old_version}/data" \ + -v "$data_dir:/var/lib/postgresql/${new_version}/data" \ + tianon/postgres-upgrade:"${old_version}-to-${new_version}" + + docker run --rm -v "$data_old:/data" busybox:1.30.1-uclibc chmod 777 -R /data + rm -rf "$data_old" + service_start "$SERVICE" "${@:2}" if [[ "$SERVICE_RESTART_APPS" == "true" ]]; then From 34b9307ab01f974fbe93953ec4ed0f7e6f11dce8 Mon Sep 17 00:00:00 2001 From: kjwon15 Date: Fri, 3 May 2019 22:43:10 +0900 Subject: [PATCH 2/3] Check that migrating is available --- subcommands/upgrade | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/subcommands/upgrade b/subcommands/upgrade index 70927358..415ee358 100755 --- a/subcommands/upgrade +++ b/subcommands/upgrade @@ -21,6 +21,12 @@ get_simple_version() { } +docker_image_exists() { + local image=$1 + local tag=$2 + curl --silent -f -lLS "https://hub.docker.com/v2/repositories/$image/tags/$tag" &>/dev/null +} + service-upgrade-cmd() { #E you can upgrade an existing service to a new image or image-version @@ -76,17 +82,20 @@ service-upgrade-cmd() { old_version=$(get_simple_version "$OLD_IMAGE_VERSION") new_version=$(get_simple_version "$PLUGIN_IMAGE_VERSION") - dokku_log_info2 "Migrating $SERVICE from $old_version to $new_version" + if docker_image_exists tianon/postgres-upgrade "$old_version-to-$new_version"; then - mv "$data_dir" "$data_old" + dokku_log_info2 "Migrating $SERVICE from $old_version to $new_version" - docker run --rm \ - -v "$data_old:/var/lib/postgresql/${old_version}/data" \ - -v "$data_dir:/var/lib/postgresql/${new_version}/data" \ - tianon/postgres-upgrade:"${old_version}-to-${new_version}" + mv "$data_dir" "$data_old" - docker run --rm -v "$data_old:/data" busybox:1.30.1-uclibc chmod 777 -R /data - rm -rf "$data_old" + docker run --rm \ + -v "$data_old:/var/lib/postgresql/${old_version}/data" \ + -v "$data_dir:/var/lib/postgresql/${new_version}/data" \ + tianon/postgres-upgrade:"${old_version}-to-${new_version}" + + docker run --rm -v "$data_old:/data" busybox:1.30.1-uclibc chmod 777 -R /data + rm -rf "$data_old" + fi service_start "$SERVICE" "${@:2}" From 1465ecc49242fb1abb5d38691d8687fe45c8f3ca Mon Sep 17 00:00:00 2001 From: kjwon15 Date: Sat, 4 May 2019 00:13:15 +0900 Subject: [PATCH 3/3] Fix get_simple_version --- subcommands/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subcommands/upgrade b/subcommands/upgrade index 415ee358..95b2df66 100755 --- a/subcommands/upgrade +++ b/subcommands/upgrade @@ -11,7 +11,7 @@ get_simple_version() { # 11.2 => 11 # 11 => 11 local version=$1 - IFS=. read -r -a arr <<< "$version" + IFS=. read -r -a arr <<< "${version%-*}" if [ "${arr[0]}" -lt 10 ]; then echo "${arr[0]}.${arr[1]}"