|
|
@ -2380,6 +2380,110 @@ cmdline.spec:mongo:cmd:upgrade:run() { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
cmdline.spec.gnu postgres |
|
|
|
|
|
|
|
cmdline.spec::cmd:postgres:run() { |
|
|
|
: |
|
|
|
} |
|
|
|
|
|
|
|
cmdline.spec.gnu upgrade |
|
|
|
cmdline.spec:postgres:cmd:upgrade:run() { |
|
|
|
|
|
|
|
: :posarg: [TARGET_VERSION] "Target version to migrate to" |
|
|
|
: :optval: --service,-s "The postgre service name (defaults to 'postgres')" |
|
|
|
: :optfla: --debug,-d "Display debugging information" |
|
|
|
|
|
|
|
local URL |
|
|
|
|
|
|
|
depends yq |
|
|
|
|
|
|
|
postgres_service="${opt_service:-postgres}" |
|
|
|
available_actions=$(compose --get-available-actions) || exit 1 |
|
|
|
available_actionable_services=($(e "$available_actions" | yq 'keys().[]')) |
|
|
|
if [[ " ${available_actionable_services[*]} " != *" $postgres_service "* ]]; then |
|
|
|
err "Service '$postgres_service' was not found in current 'compose.yml'." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
opts_compose=() |
|
|
|
if [ -n "$opt_debug" ]; then |
|
|
|
opts_compose+=("--debug") |
|
|
|
else |
|
|
|
opts_compose+=("-q") |
|
|
|
fi |
|
|
|
|
|
|
|
project_name=$(compose:project_name) || exit 1 |
|
|
|
containers=($(compose:service:containers "${project_name}" "${postgres_service}")) || exit 1 |
|
|
|
|
|
|
|
## XXXvlab: quick hack, to make more beautiful later |
|
|
|
cron_container=$(compose:service:containers "${project_name}" "cron") |
|
|
|
containers+=("$cron_container") |
|
|
|
docker stop "$cron_container" >/dev/null 2>&1 || true |
|
|
|
|
|
|
|
before_version= |
|
|
|
uptodate= |
|
|
|
upgraded= |
|
|
|
msgerr=() |
|
|
|
while read-0a-err errlvl line; do |
|
|
|
echo "$line" |
|
|
|
rline=$(printf "%s" "$line" | sed_compat "s/$__color_sequence_regex//g") |
|
|
|
case "$rline" in |
|
|
|
"II Current postgres version: "*) |
|
|
|
before_version="${rline#II Current postgres version: }" |
|
|
|
;; |
|
|
|
"II ${postgres_service} is already up-to-date.") |
|
|
|
if [ -z "$before_version" ]; then |
|
|
|
msgerr+=("expected a 'current version' line before the 'up-to-date' one.") |
|
|
|
continue |
|
|
|
fi |
|
|
|
after_version="$before_version" |
|
|
|
uptodate=1 |
|
|
|
;; |
|
|
|
"II Successfully upgraded from ${before_version} to "*) |
|
|
|
after_version="${rline#II Successfully upgraded from ${before_version} to }" |
|
|
|
upgraded=1 |
|
|
|
;; |
|
|
|
*) |
|
|
|
: |
|
|
|
;; |
|
|
|
esac |
|
|
|
done < <( |
|
|
|
## -q to remove the display of ``compose`` related information |
|
|
|
## like relation resolution. |
|
|
|
## -c on the upgrade action to force color |
|
|
|
ansi_color=yes p-0a-err compose -q -c "${opts_compose[@]}" upgrade "$postgres_service" --no-hint -c "$TARGET_VERSION" 2>&1 |
|
|
|
) |
|
|
|
|
|
|
|
if [ "$errlvl" != 0 ]; then |
|
|
|
exit "$errlvl" |
|
|
|
fi |
|
|
|
if [ -n "$uptodate" ]; then |
|
|
|
for container in "${containers[@]}"; do |
|
|
|
[ -n "$container" ] || continue |
|
|
|
Wrap -d "start ${DARKYELLOW}${postgres_service}${NORMAL}'s container" -- \ |
|
|
|
docker start "$container" || { |
|
|
|
err "Failed to start container '$container'." |
|
|
|
exit 1 |
|
|
|
} |
|
|
|
done |
|
|
|
exit 0 |
|
|
|
fi |
|
|
|
if [ -z "$upgraded" ]; then |
|
|
|
err "Unexpected output of 'upgrade' action with errorlevel 0 and without success" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
desc="update \`compose.yml\` to set ${DARKYELLOW}$postgres_service${NORMAL}'s " |
|
|
|
desc+="docker image to actual code version ${WHITE}${after_version}${NORMAL}" |
|
|
|
Wrap -d "$desc" -- \ |
|
|
|
compose:file:value-change \ |
|
|
|
"${postgres_service}.docker-compose.image" \ |
|
|
|
"docker.0k.io/postgres:${after_version}-myc" || exit 1 |
|
|
|
|
|
|
|
echo "${WHITE}Launching final compose${NORMAL}" |
|
|
|
compose up || exit 1 |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmdline.spec.gnu bench |
|
|
|
|
|
|
|