From b6d5cae17bca3fd76377fc01d1006bcbe3b702da Mon Sep 17 00:00:00 2001 From: Andrea Dell'Amico Date: Sun, 15 Oct 2023 15:13:16 +0200 Subject: [PATCH] Some code cleanup. --- tasks/postgresql-config.yml | 148 +++++----- tasks/postgresql-streaming-replication.yml | 317 +++++++++++---------- templates/replica_pgpass.j2 | 1 + 3 files changed, 244 insertions(+), 222 deletions(-) create mode 100644 templates/replica_pgpass.j2 diff --git a/tasks/postgresql-config.yml b/tasks/postgresql-config.yml index 115f1ab..6aab555 100644 --- a/tasks/postgresql-config.yml +++ b/tasks/postgresql-config.yml @@ -1,40 +1,56 @@ --- -- name: Data directory for Deb/Ubuntu - block: - - name: Check if the new postgresql data directory exists - stat: path={{ psql_data_dir }} - register: postgresql_data_dir - - - name: Stop the postgresql service while reconfiguring the data directory - service: name=postgresql state=stopped - when: postgresql_data_dir.stat.isdir is not defined - - - name: Create the postgresql data directory if it is not in the default place - file: dest={{ psql_data_dir }} owner=postgres group=postgres mode=700 recurse=yes state=directory - - - name: Set the postgresql data dir if it is different from the default - become: True - become_user: postgres - action: configfile path={{ psql_conf_dir }}/postgresql.conf key=data_directory value="'{{ psql_data_dir }}'" - - - name: Copy the postgresql data directory into the new place - shell: '[ "/var/lib/postgresql/{{ psql_version }}/main" != "{{ psql_data_dir }}" ] && cp -a /var/lib/postgresql/{{ psql_version }}/main/* {{ psql_data_dir }}' - args: - creates: '{{ psql_data_dir }}/main/base' - when: postgresql_data_dir.stat.isdir is not defined - - - name: Start the postgresql service that will use the new data directory - service: name=postgresql state=started - when: postgresql_data_dir.stat.isdir is not defined - +- name: postgresql-config | Data directory for Deb/Ubuntu when: - psql_use_alternate_data_dir - ansible_distribution_file_variety == "Debian" - tags: [ 'postgresql', 'postgres', 'pg_conf' ] - -- name: Configuration of Deb/Ubuntu systems + tags: ['postgresql', 'postgres', 'pg_conf'] block: - - name: Set some postgresql configuration parameters that require a db restart + - name: postgresql-config | Check if the new postgresql data directory exists + ansible.builtin.stat: + path: "{{ psql_data_dir }}" + register: postgresql_data_dir + + - name: postgresql-config | Stop the postgresql service while reconfiguring the data directory + ansible.builtin.service: + name: postgresql + state: stopped + when: postgresql_data_dir.stat.isdir is not defined + + - name: postgresql-config | Create the postgresql data directory if it is not in the default place + ansible.builtin.file: + dest: "{{ psql_data_dir }}" + owner: postgres + group: postgres + mode: '700' + state: directory + recurse: true + + - name: postgresql-config | Set the postgresql data dir if it is different from the default + become: true + become_user: postgres + community.postgresql.postgresql_set: + name: data_directory + value: "'{{ psql_data_dir }}'" + + - name: postgresql-config | Copy the postgresql data directory into the new place + ansible.builtin.shell: + cmd: | + if [ "/var/lib/postgresql/{{ psql_version | quote }}/main" != "{{ psql_data_dir | quote }}" ] ; then + cp -a /var/lib/postgresql/{{ psql_version | quote }}/main/* {{ psql_data_dir | quote }} + fi + args: + creates: '{{ psql_data_dir }}/main/base' + when: postgresql_data_dir.stat.isdir is not defined + + - name: postgresql-config | Start the postgresql service that will use the new data directory + ansible.builtin.service: + name: postgresql + state: started + when: postgresql_data_dir.stat.isdir is not defined + +- name: postgresql-config | Configuration of Deb/Ubuntu systems + block: + - name: postgresql-config | Set some postgresql configuration parameters that require a db restart become: True become_user: postgres action: configfile path={{ psql_conf_dir }}/postgresql.conf key={{ item.name }} value="{{ item.value }}" @@ -43,7 +59,7 @@ notify: Restart postgresql tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Set the postgresql logging configuration parameters + - name: postgresql-config | Set the postgresql logging configuration parameters become: True become_user: postgres action: configfile path={{ psql_conf_dir }}/postgresql.conf key={{ item.name }} value="{{ item.value }}" @@ -52,7 +68,7 @@ notify: Reload postgresql tags: [ 'postgresql', 'postgres', 'pg_conf', 'pg_conf_log' ] - - name: Set the postgresql autovacuum configuration parameters + - name: postgresql-config | Set the postgresql autovacuum configuration parameters become: True become_user: postgres action: configfile path={{ psql_conf_dir }}/postgresql.conf key={{ item.name }} value="{{ item.value }}" @@ -61,52 +77,52 @@ notify: Reload postgresql tags: [ 'postgresql', 'postgres', 'pg_conf', 'pg_conf_autovacuum' ] - - name: Set the postgresql listen port + - name: postgresql-config | Set the postgresql listen port action: configfile path={{ psql_conf_dir }}/postgresql.conf key=port value="{{ psql_db_port }}" register: restart_postgresql tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: We want postgres listen on the public IP + - name: postgresql-config | We want postgres listen on the public IP action: configfile path={{ psql_conf_dir }}/postgresql.conf key=listen_addresses value="'*'" register: restart_postgresql when: - psql_listen_on_ext_int tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: If postgresql is only accessed from localhost make it listen only on the localhost interface + - name: postgresql-config | If postgresql is only accessed from localhost make it listen only on the localhost interface action: configfile path={{ psql_conf_dir }}/postgresql.conf key=listen_addresses value="'localhost'" register: restart_postgresql when: - not psql_listen_on_ext_int tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Log the connections + - name: postgresql-config | Log the connections action: configfile path={{ psql_conf_dir }}/postgresql.conf key=log_connections value="on" register: restart_postgresql when: psql_db_data is defined tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Log the disconnections + - name: postgresql-config | Log the disconnections action: configfile path={{ psql_conf_dir }}/postgresql.conf key=log_disconnections value="on" register: restart_postgresql when: psql_db_data is defined tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Log the hostnames + - name: postgresql-config | Log the hostnames action: configfile path={{ psql_conf_dir }}/postgresql.conf key=log_hostname value="on" register: restart_postgresql when: - psql_listen_on_ext_int tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Set the correct permissions to the postgresql files + - name: postgresql-config | Set the correct permissions to the postgresql files file: dest={{ psql_conf_dir }}/{{ item }} owner=root group=postgres mode=0640 with_items: - pg_hba.conf - postgresql.conf tags: [ 'postgresql', 'postgres', 'pg_hba', 'pg_conf' ] - - name: Restart the postgresql server after changing parameters that need a restart + - name: postgresql-config | Restart the postgresql server after changing parameters that need a restart service: name=postgresql state=restarted when: - restart_postgresql is defined and restart_postgresql is changed @@ -115,40 +131,40 @@ when: ansible_distribution_file_variety == "Debian" -- name: Data directory for EL +- name: postgresql-config | Data directory for EL block: - name: Check if the new postgresql data directory exists stat: path={{ psql_el_data_dir }} register: postgresql_data_dir - - name: Stop the postgresql service while reconfiguring the data directory + - name: postgresql-config | Stop the postgresql service while reconfiguring the data directory service: name='postgresql-{{ psql_version }}' state=stopped when: postgresql_data_dir.stat.isdir is not defined - - name: Create the postgresql data directory if it is not in the default place + - name: postgresql-config | Create the postgresql data directory if it is not in the default place file: dest={{ psql_el_data_dir }} owner=postgres group=postgres mode=700 recurse=yes state=directory - - name: Set the postgresql data dir if it is different from the default - become: True + - name: postgresql-config | Set the postgresql data dir if it is different from the default + become: true become_user: postgres action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key=data_directory value="'{{ psql_el_data_dir }}'" - - name: Copy the postgresql data directory into the new place + - name: postgresql-config | Copy the postgresql data directory into the new place shell: '[ "/var/lib/pgsql/{{ psql_version }}/data" != "{{ psql_el_data_dir }}" ] && cp -a /var/lib/pgsql/{{ psql_version }}/data/* {{ psql_el_data_dir }}' args: creates: '{{ psql_el_data_dir }}/base' when: postgresql_data_dir.stat.isdir is not defined - - name: Fix the SELinux context for the new data directory + - name: postgresql-config | Fix the SELinux context for the new data directory sefcontext: target: '{{ psql_el_base_dir }}(/.*)?' setype: postgresql_db_t state: present - - name: Restore the SELinux context + - name: postgresql-config | Restore the SELinux context command: restorecon -vR {{ psql_el_base_dir }} - - name: Start the postgresql service that will use the new data directory + - name: postgresql-config | Start the postgresql service that will use the new data directory service: name='postgresql-{{ psql_version }}' state=started when: postgresql_data_dir.stat.isdir is not defined @@ -157,21 +173,21 @@ - ansible_distribution_file_variety == "RedHat" tags: [ 'postgresql', 'postgres', 'pg_conf' ] -- name: Configuration of EL systems +- name: postgresql-config | Configuration of EL systems block: - - name: Create the postgresql log directory + - name: postgresql-config | Create the postgresql log directory file: dest={{ psql_log_dir }} state=directory owner=postgres group=postgres mode='0750' - - name: Fix the SELinux context for the postgresql log directory + - name: postgresql-config | Fix the SELinux context for the postgresql log directory sefcontext: target: '{{ psql_log_dir }}(/.*)?' setype: postgresql_db_t state: present - - name: Fix the SELinux context for the postgresql log directory + - name: postgresql-config | Fix the SELinux context for the postgresql log directory command: restorecon -vR {{ psql_log_dir }} - - name: Set some postgresql configuration parameters that require a db restart + - name: postgresql-config | Set some postgresql configuration parameters that require a db restart become: True become_user: postgres action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key={{ item.name }} value="{{ item.value }}" @@ -180,7 +196,7 @@ notify: Restart postgresql tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Set the postgresql logging configuration parameters + - name: postgresql-config | Set the postgresql logging configuration parameters become: True become_user: postgres action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key={{ item.name }} value="{{ item.value }}" @@ -189,7 +205,7 @@ notify: Reload postgresql tags: [ 'postgresql', 'postgres', 'pg_conf', 'pg_conf_log' ] - - name: Set the postgresql autovacuum configuration parameters + - name: postgresql-config | Set the postgresql autovacuum configuration parameters become: True become_user: postgres action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key={{ item.name }} value="{{ item.value }}" @@ -198,52 +214,52 @@ notify: Reload postgresql tags: [ 'postgresql', 'postgres', 'pg_conf', 'pg_conf_autovacuum' ] - - name: Set the postgresql listen port + - name: postgresql-config | Set the postgresql listen port action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key=port value="{{ psql_db_port }}" register: restart_postgresql tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: We want postgres listen on the public IP + - name: postgresql-config | We want postgres listen on the public IP action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key=listen_addresses value="'*'" register: restart_postgresql when: - psql_listen_on_ext_int tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: If postgresql is only accessed from localhost make it listen only on the localhost interface + - name: postgresql-config | If postgresql is only accessed from localhost make it listen only on the localhost interface action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key=listen_addresses value="'localhost'" register: restart_postgresql when: - not psql_listen_on_ext_int tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Log the connections + - name: postgresql-config | Log the connections action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key=log_connections value="on" register: restart_postgresql when: psql_db_data is defined tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Log the disconnections + - name: postgresql-config | Log the disconnections action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key=log_disconnections value="on" register: restart_postgresql when: psql_db_data is defined tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Log the hostnames + - name: postgresql-config | Log the hostnames action: configfile path={{ psql_el_conf_dir }}/postgresql.conf key=log_hostname value="on" register: restart_postgresql when: - psql_listen_on_ext_int tags: [ 'postgresql', 'postgres', 'pg_conf' ] - - name: Set the correct permissions to the postgresql files + - name: postgresql-config | Set the correct permissions to the postgresql files file: dest={{ psql_el_conf_dir }}/{{ item }} owner=root group=postgres mode=0640 with_items: - pg_hba.conf - postgresql.conf tags: [ 'postgresql', 'postgres', 'pg_hba', 'pg_conf' ] - - name: Restart the postgresql server after changing parameters that need a restart + - name: postgresql-config | Restart the postgresql server after changing parameters that need a restart service: name='postgresql-{{ psql_version }}' state=restarted when: - restart_postgresql is defined and restart_postgresql is changed diff --git a/tasks/postgresql-streaming-replication.yml b/tasks/postgresql-streaming-replication.yml index 742e01d..47c1fa6 100644 --- a/tasks/postgresql-streaming-replication.yml +++ b/tasks/postgresql-streaming-replication.yml @@ -1,173 +1,178 @@ --- -- name: Configuration of the streaming replication - block: - - name: Create the replication user - postgresql_user: - name: '{{ psql_streaming_replication_user }}' - role_attr_flags: "REPLICATION" - password: '{{ psql_streaming_replication_pwd }}' - encrypted: yes - state: present - - - name: Setup the streaming replication on the primary - postgresql_set: - name: '{{ item.name }}' - value: "{{ item.value }}" - loop: '{{ psql_streaming_replication_config }}' - when: postgresql_streaming_replication_primary_node == ansible_fqdn - notify: Restart postgresql - - - meta: flush_handlers - - become: True +- name: postgresql-streaming-replication | Configuration of the streaming replication + become: true become_user: postgres - tags: [ 'postgresql', 'postgres', 'pg_conf', 'postgresql_replication' ] - -- name: Configure the streaming replication user on deb systems + tags: ['postgresql', 'postgres', 'pg_conf', 'postgresql_replication'] block: - - name: Configure the replication user permissions on deb - postgresql_pg_hba: - dest: '{{ psql_conf_dir }}/pg_hba.conf' - contype: host - users: '{{ psql_streaming_replication_user }}' - address: '{{ item }}' - databases: 'replication' - #method: 'scram-sha-256' - method: 'md5' - state: present - loop: '{{ psql_streaming_replication_hosts }}' - notify: Reload postgresql - when: not psql_enable_ssl + - name: postgresql-streaming-replication | Create the replication user + community.postgresql.postgresql_user: + name: '{{ psql_streaming_replication_user }}' + role_attr_flags: "REPLICATION" + password: '{{ psql_streaming_replication_pwd }}' + encrypted: true + state: present - - name: Configure the replication user permissions on deb - postgresql_pg_hba: - dest: '{{ psql_conf_dir }}/pg_hba.conf' - contype: hostssl - users: '{{ psql_streaming_replication_user }}' - address: '{{ item }}' - databases: 'replication' - #method: 'scram-sha-256' - method: 'md5' - state: present - loop: '{{ psql_streaming_replication_hosts }}' - notify: Reload postgresql - when: psql_enable_ssl + - name: postgresql-streaming-replication | Setup the streaming replication on the primary + community.postgresql.postgresql_set: + name: '{{ item.name }}' + value: "{{ item.value }}" + loop: '{{ psql_streaming_replication_config }}' + when: postgresql_streaming_replication_primary_node == ansible_fqdn + notify: Restart postgresql - - meta: flush_handlers + - name: postgresql-streaming-replication | Flush flush_handlers restart PostgreSQL + ansible.builtin.meta: flush_handlers +- name: postgresql-streaming-replication | Configure the streaming replication user on deb systems when: ansible_distribution_file_variety == "Debian" - tags: [ 'postgresql', 'postgres', 'pg_conf', 'pg_hba', 'postgresql_replication' ] - -- name: Configure the streaming replication user on EL + tags: ['postgresql', 'postgres', 'pg_conf', 'pg_hba', 'postgresql_replication'] block: - - name: Configure the replication user permissions on EL - postgresql_pg_hba: - dest: '{{ psql_el_conf_dir }}/pg_hba.conf' - contype: host - users: '{{ psql_streaming_replication_user }}' - address: '{{ item }}' - databases: 'replication' - #method: 'scram-sha-256' - method: 'md5' - state: present - loop: '{{ psql_streaming_replication_hosts }}' - notify: Reload postgresql - when: not psql_enable_ssl + - name: postgresql-streaming-replication | Configure the replication user permissions on deb + community.postgresql.postgresql_pg_hba: + dest: '{{ psql_conf_dir }}/pg_hba.conf' + contype: host + users: '{{ psql_streaming_replication_user }}' + address: '{{ item }}' + databases: 'replication' + # method: 'scram-sha-256' + method: 'md5' + state: present + loop: '{{ psql_streaming_replication_hosts }}' + notify: Reload postgresql + when: not psql_enable_ssl - - name: Configure the replication user permissions on EL - postgresql_pg_hba: - dest: '{{ psql_el_conf_dir }}/pg_hba.conf' - contype: hostssl - users: '{{ psql_streaming_replication_user }}' - address: '{{ item }}' - databases: 'replication' - #method: 'scram-sha-256' - method: 'md5' - state: present - loop: '{{ psql_streaming_replication_hosts }}' - notify: Reload postgresql - when: psql_enable_ssl + - name: postgresql-streaming-replication | Configure the replication user permissions on deb + community.postgresql.postgresql_pg_hba: + dest: '{{ psql_conf_dir }}/pg_hba.conf' + contype: hostssl + users: '{{ psql_streaming_replication_user }}' + address: '{{ item }}' + databases: 'replication' + # method: 'scram-sha-256' + method: 'md5' + state: present + loop: '{{ psql_streaming_replication_hosts }}' + notify: Reload postgresql + when: psql_enable_ssl - - meta: flush_handlers + - name: postgresql-streaming-replication | Flush flush_handlers reload PostgreSQL + ansible.builtin.meta: flush_handlers +- name: postgresql-streaming-replication | Configure the streaming replication user on EL when: ansible_distribution_file_variety == "RedHat" - tags: [ 'postgresql', 'postgres', 'pg_conf', 'pg_hba', 'postgresql_replication' ] - -- name: Manage the replica initialization + tags: ['postgresql', 'postgres', 'pg_conf', 'pg_hba', 'postgresql_replication'] block: - - name: Set some paths when it is a deb based system - set_fact: - postgresql_user_home: '/var/lib/postgresql' - postgresql_active_data_dir: '{{ psql_data_dir }}' - when: ansible_distribution_file_variety == "Debian" + - name: postgresql-streaming-replication | Configure the replication user permissions on EL + community.postgresql.postgresql_pg_hba: + dest: '{{ psql_el_conf_dir }}/pg_hba.conf' + contype: host + users: '{{ psql_streaming_replication_user }}' + address: '{{ item }}' + databases: 'replication' + # method: 'scram-sha-256' + method: 'md5' + state: present + loop: '{{ psql_streaming_replication_hosts }}' + notify: Reload postgresql + when: not psql_enable_ssl - - name: Set some paths it is a EL based system - set_fact: - postgresql_user_home: '/var/lib/pgsql' - postgresql_active_data_dir: '{{ psql_el_data_dir }}' - when: ansible_distribution_file_variety == "RedHat" + - name: postgresql-streaming-replication | Configure the replication user permissions on EL + community.postgresql.postgresql_pg_hba: + dest: '{{ psql_el_conf_dir }}/pg_hba.conf' + contype: hostssl + users: '{{ psql_streaming_replication_user }}' + address: '{{ item }}' + databases: 'replication' + # method: 'scram-sha-256' + method: 'md5' + state: present + loop: '{{ psql_streaming_replication_hosts }}' + notify: Reload postgresql + when: psql_enable_ssl - - name: Create the .pgpass file inside the postgresql home {{ postgresql_user_home }} - become: True - become_user: postgres - copy: - content: "{{ postgresql_streaming_replication_primary_node }}:{{ psql_db_port }}:replication:{{ psql_streaming_replication_user }}:{{ psql_streaming_replication_pwd }}" - dest: '{{ postgresql_user_home }}/.pgpass' - mode: '0400' - - - name: Check if a replica is already enabled - stat: - path: '{{ postgresql_active_data_dir }}/standby.signal' - register: standby_signal_file - - - debug: - msg: 'Replica file: {{ postgresql_active_data_dir }}/standby.signal' - - - name: Stop the postgresql service on deb systems - service: - name: postgresql - state: stopped - when: - - ansible_distribution_file_variety == "Debian" - - not standby_signal_file.stat.exists - - - name: Stop the postgresql service on EL systems - service: - name: 'postgresql-{{ psql_version }}' - state: stopped - when: - - ansible_distribution_file_variety == "RedHat" - - not standby_signal_file.stat.exists - - - name: Remove the data directory contents {{ postgresql_active_data_dir }} - become: True - become_user: postgres - file: - dest: '{{ postgresql_active_data_dir }}' - state: absent - when: not standby_signal_file.stat.exists - - - name: Run the pg_basebackup command that starts the replica - become: True - become_user: postgres - shell: /usr/bin/pg_basebackup -h {{ postgresql_streaming_replication_primary_node }} -p {{ psql_db_port }} -U {{ psql_streaming_replication_user }} -D {{ postgresql_active_data_dir }} -Fp -R -Xs -P -w - when: not standby_signal_file.stat.exists - - - name: Start the postgresql service - service: - name: postgresql - state: started - when: - - ansible_distribution_file_variety == "Debian" - - not standby_signal_file.stat.exists - - - name: Start the postgresql service on EL systems - service: - name: 'postgresql-{{ psql_version }}' - state: started - when: - - ansible_distribution_file_variety == "RedHat" - - not standby_signal_file.stat.exists + - name: postgresql-streaming-replication | Flush flush_handlers reload PostgreSQL + ansible.builtin.meta: flush_handlers +- name: postgresql-streaming-replication | Manage the replica initialization when: postgresql_streaming_replication_primary_node != ansible_fqdn - tags: [ 'postgresql', 'postgres', 'pg_conf', 'postgresql_replication' ] + tags: ['postgresql', 'postgres', 'pg_conf', 'postgresql_replication'] + block: + - name: postgresql-streaming-replication | Set some paths when it is a deb based system + ansible.builtin.set_fact: + postgresql_user_home: '/var/lib/postgresql' + postgresql_active_data_dir: '{{ psql_data_dir }}' + when: ansible_distribution_file_variety == "Debian" + + - name: postgresql-streaming-replication | Set some paths it is a EL based system + ansible.builtin.set_fact: + postgresql_user_home: '/var/lib/pgsql' + postgresql_active_data_dir: '{{ psql_el_data_dir }}' + when: ansible_distribution_file_variety == "RedHat" + + - name: postgresql-streaming-replication | Create the .pgpass file inside the postgresql home {{ postgresql_user_home }} + become: true + become_user: postgres + ansible.builtin.template: + src: replica_pgpass.j2 + dest: '{{ postgresql_user_home }}/.pgpass' + mode: '0400' + + - name: postgresql-streaming-replication | Check if a replica is already enabled + ansible.builtin.stat: + path: '{{ postgresql_active_data_dir }}/standby.signal' + register: standby_signal_file + + - name: postgresql-streaming-replication | Prnt the replica file + ansible.builtin.debug: + msg: 'Replica file: {{ postgresql_active_data_dir }}/standby.signal' + + - name: postgresql-streaming-replication | Stop the postgresql service on deb systems + ansible.builtin.service: + name: postgresql + state: stopped + when: + - ansible_distribution_file_variety == "Debian" + - not standby_signal_file.stat.exists + + - name: postgresql-streaming-replication | Stop the postgresql service on EL systems + ansible.builtin.service: + name: 'postgresql-{{ psql_version }}' + state: stopped + when: + - ansible_distribution_file_variety == "RedHat" + - not standby_signal_file.stat.exists + + - name: postgresql-streaming-replication | Remove the data directory contents {{ postgresql_active_data_dir }} + become: true + become_user: postgres + ansible.builtin.file: + dest: '{{ postgresql_active_data_dir }}' + state: absent + when: not standby_signal_file.stat.exists + + - name: postgresql-streaming-replication | Run the pg_basebackup command that starts the replica + become: true + become_user: postgres + ansible.builtin.shell: > + /usr/bin/pg_basebackup -h {{ postgresql_streaming_replication_primary_node }} + -p {{ psql_db_port }} -U {{ psql_streaming_replication_user }} + -D {{ postgresql_active_data_dir }} -Fp -R -Xs -P -w + args: + creates: '{{ postgresql_active_data_dir }}' + when: not standby_signal_file.stat.exists + + - name: postgresql-streaming-replication | Start the postgresql service + ansible.builtin.service: + name: postgresql + state: started + when: + - ansible_distribution_file_variety == "Debian" + - not standby_signal_file.stat.exists + + - name: postgresql-streaming-replication | Start the postgresql service on EL systems + ansible.builtin.service: + name: 'postgresql-{{ psql_version }}' + state: started + when: + - ansible_distribution_file_variety == "RedHat" + - not standby_signal_file.stat.exists diff --git a/templates/replica_pgpass.j2 b/templates/replica_pgpass.j2 new file mode 100644 index 0000000..e40eea3 --- /dev/null +++ b/templates/replica_pgpass.j2 @@ -0,0 +1 @@ +{{ postgresql_streaming_replication_primary_node }}:{{ psql_db_port }}:replication:{{ psql_streaming_replication_user }}:{{ psql_streaming_replication_pwd }}