diff --git a/src/playbooks/backup/backup.yaml b/src/playbooks/backup/backup.yaml index 090ea47aa..9c098ddb0 100644 --- a/src/playbooks/backup/backup.yaml +++ b/src/playbooks/backup/backup.yaml @@ -9,14 +9,16 @@ - "../../vars/defaults.yml" - "../../vars/flavors/{{ flavor }}.yml" - "../../vars/certificates.yml" + - "../../vars/images.yml" - "../../vars/foreman.yml" - "../../vars/database.yml" - "../../vars/base.yaml" pre_tasks: - - name: Ensure PostgreSQL client package is installed - ansible.builtin.package: - name: postgresql + - name: Ensure PostgreSQL client image is available + containers.podman.podman_image: + name: "{{ postgresql_container_image }}:{{ postgresql_container_tag }}" state: present + pull: "{{ not (air_gapped | bool) }}" roles: - role: backup vars: diff --git a/src/playbooks/restore/restore.yaml b/src/playbooks/restore/restore.yaml index f824f9a18..dcf8a71d3 100644 --- a/src/playbooks/restore/restore.yaml +++ b/src/playbooks/restore/restore.yaml @@ -5,8 +5,15 @@ gather_facts: true vars_files: - "../../vars/defaults.yml" + - "../../vars/images.yml" - "../../vars/database.yml" - "../../vars/base.yaml" + pre_tasks: + - name: Ensure PostgreSQL client image is available + containers.podman.podman_image: + name: "{{ postgresql_container_image }}:{{ postgresql_container_tag }}" + state: present + pull: "{{ not (air_gapped | bool) }}" roles: - restore diff --git a/src/roles/backup/tasks/database_dumps.yaml b/src/roles/backup/tasks/database_dumps.yaml index 466a5e595..118f07491 100644 --- a/src/roles/backup/tasks/database_dumps.yaml +++ b/src/roles/backup/tasks/database_dumps.yaml @@ -1,14 +1,21 @@ --- - name: Dump databases ansible.builtin.command: - cmd: > - pg_dump - --host={{ item.host }} - --port={{ item.port }} - --username={{ item.user }} - --format=custom - --file="{{ backup_dir_full }}/{{ item.database }}.dump" - "{{ item.database }}" + argv: + - podman + - run + - --rm + - --network=host + - "--volume={{ backup_dir_full }}:/backup:rw,Z" + - --env=PGPASSWORD + - "{{ postgresql_container_image }}:{{ postgresql_container_tag }}" + - pg_dump + - "--host={{ item.host }}" + - "--port={{ item.port }}" + - "--username={{ item.user }}" + - --format=custom + - "--file=/backup/{{ item.database }}.dump" + - "{{ item.database }}" environment: PGPASSWORD: "{{ item.password }}" loop: "{{ backup_databases_config }}" diff --git a/src/roles/backup/tasks/main.yaml b/src/roles/backup/tasks/main.yaml index cddf1b996..695ff67ee 100644 --- a/src/roles/backup/tasks/main.yaml +++ b/src/roles/backup/tasks/main.yaml @@ -92,7 +92,15 @@ - name: Wait for PostgreSQL readiness ansible.builtin.command: - cmd: pg_isready -h {{ database_management_host }} -p {{ database_port }} + argv: + - podman + - run + - --rm + - --network=host + - "{{ postgresql_container_image }}:{{ postgresql_container_tag }}" + - pg_isready + - "--host={{ database_management_host }}" + - "--port={{ database_port }}" register: backup_pg_ready retries: "{{ backup_postgresql_ready_retries }}" delay: "{{ backup_postgresql_ready_delay }}" diff --git a/src/roles/restore/tasks/restore_databases.yaml b/src/roles/restore/tasks/restore_databases.yaml index eebf1e641..cf5b7cec8 100644 --- a/src/roles/restore/tasks/restore_databases.yaml +++ b/src/roles/restore/tasks/restore_databases.yaml @@ -12,7 +12,15 @@ - name: Wait for PostgreSQL readiness ansible.builtin.command: - cmd: pg_isready --host={{ database_management_host }} --port={{ database_port }} + argv: + - podman + - run + - --rm + - --network=host + - "{{ postgresql_container_image }}:{{ postgresql_container_tag }}" + - pg_isready + - "--host={{ database_management_host }}" + - "--port={{ database_port }}" register: restore_pg_ready retries: "{{ restore_postgresql_ready_retries }}" delay: "{{ restore_postgresql_ready_delay }}" @@ -69,7 +77,7 @@ - name: Enable postgres_fdw extension for IOP databases community.postgresql.postgresql_ext: name: postgres_fdw - db: "{{ item.database }}" + login_db: "{{ item.database }}" login_host: "{{ database_management_host }}" login_port: "{{ database_port }}" login_user: postgres @@ -81,13 +89,20 @@ - name: Restore databases from dump files ansible.builtin.command: - cmd: > - pg_restore - --host={{ database_management_host }} - --port={{ database_port }} - --username=postgres - --dbname={{ item.database }} - "{{ restore_backup_dir }}/{{ item.dump_file }}" + argv: + - podman + - run + - --rm + - --network=host + - "--volume={{ restore_backup_dir }}:/backup:ro,Z" + - --env=PGPASSWORD + - "{{ postgresql_container_image }}:{{ postgresql_container_tag }}" + - pg_restore + - "--host={{ database_management_host }}" + - "--port={{ database_port }}" + - --username=postgres + - "--dbname={{ item.database }}" + - "/backup/{{ item.dump_file }}" environment: PGPASSWORD: "{{ postgresql_admin_password }}" loop: "{{ restore_databases_to_restore }}"