diff --git a/config/crd/bases/eda.ansible.com_edas.yaml b/config/crd/bases/eda.ansible.com_edas.yaml index a447a8ea..17f1bb93 100644 --- a/config/crd/bases/eda.ansible.com_edas.yaml +++ b/config/crd/bases/eda.ansible.com_edas.yaml @@ -2473,6 +2473,10 @@ spec: bundle_cacert_secret: description: Secret where the trusted Certificate Authority Bundle is stored type: string + force_drop_db: + description: Force drop the database before restoring. USE WITH CAUTION! + type: boolean + default: false status: description: Status defines the observed state of EDA properties: diff --git a/config/manifests/bases/eda-server-operator.clusterserviceversion.yaml b/config/manifests/bases/eda-server-operator.clusterserviceversion.yaml index cd0471a1..994935af 100644 --- a/config/manifests/bases/eda-server-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/eda-server-operator.clusterserviceversion.yaml @@ -649,6 +649,11 @@ spec: - urn:alm:descriptor:com.tectonic.ui:advanced - urn:alm:descriptor:com.tectonic.ui:booleanSwitch - urn:alm:descriptor:com.tectonic.ui:hidden + - displayName: Force drop database before restore + path: force_drop_db + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch statusDescriptors: - description: Admin password for the instance deployed displayName: Admin Password diff --git a/roles/restore/tasks/postgres.yml b/roles/restore/tasks/postgres.yml index c8460318..653a0bf2 100644 --- a/roles/restore/tasks/postgres.yml +++ b/roles/restore/tasks/postgres.yml @@ -80,6 +80,26 @@ -p {{ eda_postgres_port }} no_log: "{{ no_log }}" +- name: Set drop db command + set_fact: + pg_drop_db: >- + echo 'DROP DATABASE {{ eda_postgres_database }} WITH (FORCE);' | PGPASSWORD='{{ eda_postgres_pass }}' psql + -U {{ eda_postgres_user }} + -h {{ resolvable_db_host }} + -d postgres + -p {{ eda_postgres_port }} + no_log: "{{ no_log }}" + +- name: Set create db command + set_fact: + pg_create_db: >- + echo 'CREATE DATABASE {{ eda_postgres_database }} WITH OWNER = {{ eda_postgres_user }};' | PGPASSWORD='{{ eda_postgres_pass }}' psql + -U {{ eda_postgres_user }} + -h {{ resolvable_db_host }} + -d postgres + -p {{ eda_postgres_port }} + no_log: "{{ no_log }}" + - name: Restore database dump to the new postgresql container k8s_exec: namespace: "{{ backup_pvc_namespace }}" @@ -102,6 +122,10 @@ 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 cat {{ backup_dir }}/eda.db | PGPASSWORD='{{ eda_postgres_pass }}' {{ pg_restore }} echo 'Successful' "