From d0c7f343b235b7ff39d2914bafedd21c03533bec Mon Sep 17 00:00:00 2001 From: Christian Adams Date: Fri, 8 Dec 2023 16:38:47 -0500 Subject: [PATCH] Fix PG Restore Force Drop DB flag (#1665) - Previously, if the flag was set to true, the bash conditional failed because the boolean was not correctly interpreted. - Use pg_restore return code to determine if the task should be marked as failed Signed-off-by: Christian M. Adams --- roles/restore/tasks/postgres.yml | 54 ++++++++++++++++++-------------- roles/restore/vars/main.yml | 4 +++ 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/roles/restore/tasks/postgres.yml b/roles/restore/tasks/postgres.yml index 36a538089..617a23ace 100644 --- a/roles/restore/tasks/postgres.yml +++ b/roles/restore/tasks/postgres.yml @@ -82,25 +82,34 @@ -p {{ awx_postgres_port }} no_log: "{{ no_log }}" -- name: Set drop db command - set_fact: - pg_drop_db: >- - echo 'DROP DATABASE {{ awx_postgres_database }} WITH (FORCE);' | PGPASSWORD='{{ awx_postgres_pass }}' psql - -U {{ awx_postgres_user }} - -h {{ resolvable_db_host }} - -d postgres - -p {{ awx_postgres_port }} - no_log: "{{ no_log }}" +- name: Force drop and create database if force_drop_db is true + block: + - name: Set drop db command + set_fact: + pg_drop_db: >- + echo 'DROP DATABASE {{ awx_postgres_database }} WITH (FORCE);' | PGPASSWORD='{{ awx_postgres_pass }}' psql + -U {{ awx_postgres_user }} + -h {{ resolvable_db_host }} + -d postgres + -p {{ awx_postgres_port }} ; + no_log: "{{ no_log }}" -- name: Set create db command - set_fact: - pg_create_db: >- - echo 'CREATE DATABASE {{ awx_postgres_database }} WITH OWNER = {{ awx_postgres_user }};' | PGPASSWORD='{{ awx_postgres_pass }}' psql - -U {{ awx_postgres_user }} - -h {{ resolvable_db_host }} - -d postgres - -p {{ awx_postgres_port }} - no_log: "{{ no_log }}" + - name: Set create db command + set_fact: + pg_create_db: >- + echo 'CREATE DATABASE {{ awx_postgres_database }} WITH OWNER = {{ awx_postgres_user }};' | PGPASSWORD='{{ awx_postgres_pass }}' psql + -U {{ awx_postgres_user }} + -h {{ resolvable_db_host }} + -d postgres + -p {{ awx_postgres_port }} ; + no_log: "{{ no_log }}" + + - name: Set complete pg restore command + set_fact: + pg_drop_create: >- + {{ pg_drop_db }} + {{ pg_create_db }} + when: force_drop_db - name: Restore database dump to the new postgresql container k8s_exec: @@ -124,14 +133,11 @@ trap 'end_keepalive \"$keepalive_file\" \"$keepalive_pid\"' EXIT SIGINT SIGTERM echo keepalive_pid: $keepalive_pid set -e -o pipefail - if {{ force_drop_db }}; then - {{ pg_drop_db }} - {{ pg_create_db }} - fi + {{ pg_drop_create }} cat {{ backup_dir }}/tower.db | PGPASSWORD='{{ awx_postgres_pass }}' {{ pg_restore }} + PG_RC=$? set +e +o pipefail - echo 'Successful' + exit $PG_RC " register: data_migration no_log: "{{ no_log }}" - failed_when: "'Successful' not in data_migration.stdout" diff --git a/roles/restore/vars/main.yml b/roles/restore/vars/main.yml index 94ccf9de0..2495549f7 100644 --- a/roles/restore/vars/main.yml +++ b/roles/restore/vars/main.yml @@ -14,3 +14,7 @@ broadcast_websocket_secret: '{{ deployment_name }}-broadcast-websocket' postgres_configuration_secret: '{{ deployment_name }}-postgres-configuration' supported_pg_version: 13 image_pull_policy: IfNotPresent + +# If set to true, the restore process will delete the existing database and create a new one +force_drop_db: false +pg_drop_create: ''