From 3efc637e317fed336ce8f89c3482bbfaac91c44c Mon Sep 17 00:00:00 2001 From: Raman Antanevich Date: Tue, 3 Jun 2025 18:27:34 +0300 Subject: [PATCH] Fix issue with installation in non-default data_directory on Debian --- tasks/configure.yml | 73 ++++++++++++++++++++++----------------------- tests/vars.yml | 1 + 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/tasks/configure.yml b/tasks/configure.yml index c6e9be679..5961784ab 100644 --- a/tasks/configure.yml +++ b/tasks/configure.yml @@ -16,6 +16,12 @@ mode: 0700 register: pgdata_dir_exist +- name: PostgreSQL | Check whether the postgres data directory is empty + find: + paths: "{{postgresql_data_directory}}" + file_type: any + register: pgdata_files_found + - name: PostgreSQL | Make sure postgres tablespaces directories exist file: path: "{{ item }}" @@ -63,44 +69,35 @@ when: ansible_os_family == "RedHat" ignore_errors: yes -- name: PostgreSQL | Stop PostgreSQL | Debian - service: - name: "{{ postgresql_service_name }}" - state: stopped - become: yes - when: ansible_os_family == "Debian" and postgresql_cluster_reset and pgdata_dir_exist.changed - -- name: PostgreSQL | Reset the cluster - drop the existing one | Debian - shell: pg_dropcluster {{ postgresql_version }} {{ postgresql_cluster_name }} - become: yes - become_user: "{{ postgresql_service_user }}" - when: ansible_os_family == "Debian" and postgresql_cluster_reset and pgdata_dir_exist.changed - -- name: PostgreSQL | Reset the cluster - create a new one (with specified encoding and locale) | Debian - shell: > - pg_createcluster --locale {{ postgresql_locale }} - -e {{ postgresql_encoding }} -d {{ postgresql_data_directory }} - {{ postgresql_version }} {{ postgresql_cluster_name }} - -- - {% if postgresql_data_checksums and postgresql_version is version_compare('9.3', '>=') %}--data-checksums{% endif %} - {% if postgresql_pwfile != "" %}--pwfile={{ postgresql_pwfile }} {% endif %} - {% if postgresql_wal_directory != "" and postgresql_version is version_compare('10', '<') %}--xlogdir={{ postgresql_wal_directory }} {% endif %} - {% if postgresql_wal_directory != "" and postgresql_version is version_compare('10', '>=') %}--waldir={{ postgresql_wal_directory }} {% endif %} - become: yes - become_user: "{{ postgresql_service_user }}" - when: ansible_os_family == "Debian" and postgresql_cluster_reset and pgdata_dir_exist.changed - -- name: PostgreSQL | Update systemd | Debian - command: systemctl daemon-reload - become: yes - when: ansible_os_family == "Debian" and postgresql_cluster_reset and pgdata_dir_exist.changed - -- name: PostgreSQL | Start PostgreSQL | Debian - service: - name: "{{ postgresql_service_name }}" - state: started - become: yes - when: ansible_os_family == "Debian" and postgresql_cluster_reset and pgdata_dir_exist.changed +- block: + - name: PostgreSQL | Stop PostgreSQL | Debian + service: + name: "{{ postgresql_service_name }}" + state: stopped + become: yes + + - name: PostgreSQL | Reset the cluster - drop the existing one | Debian + shell: pg_dropcluster {{ postgresql_version }} {{ postgresql_cluster_name }} + become: yes + become_user: "{{ postgresql_service_user }}" + + - name: PostgreSQL | Reset the cluster - create a new one (with specified encoding and locale) | Debian + shell: > + pg_createcluster --locale {{ postgresql_locale }} + -e {{ postgresql_encoding }} -d {{ postgresql_data_directory }} + {{ postgresql_version }} {{ postgresql_cluster_name }} + -- + {% if postgresql_data_checksums and postgresql_version is version_compare('9.3', '>=') %}--data-checksums{% endif %} + {% if postgresql_pwfile != "" %}--pwfile={{ postgresql_pwfile }} {% endif %} + {% if postgresql_wal_directory != "" and postgresql_version is version_compare('10', '<') %}--xlogdir={{ postgresql_wal_directory }} {% endif %} + {% if postgresql_wal_directory != "" and postgresql_version is version_compare('10', '>=') %}--waldir={{ postgresql_wal_directory }} {% endif %} + become: yes + become_user: "{{ postgresql_service_user }}" + + - name: PostgreSQL | Update systemd | Debian + command: systemctl daemon-reload + become: yes + when: ansible_os_family == "Debian" and (postgresql_cluster_reset or pgdata_files_found.matched == 0) - name: PostgreSQL | Check whether the postgres data directory is initialized | RedHat stat: diff --git a/tests/vars.yml b/tests/vars.yml index afe518334..83ffad745 100644 --- a/tests/vars.yml +++ b/tests/vars.yml @@ -1,4 +1,5 @@ --- +postgresql_data_directory: /data/postgresql postgresql_port: 5433 postgresql_databases: