- name: Install PostgreSQL packages apt: name: - postgresql - postgresql-contrib update_cache: yes # --- Detect PostgreSQL version and cluster --- - name: Detect PostgreSQL version shell: "ls -d /etc/postgresql/*/ | head -n1 | xargs basename" register: pg_version_result changed_when: false - name: Detect cluster name shell: "ls -d /var/lib/postgresql/*/main/ 2>/dev/null | head -n1 | xargs -I {} basename $(dirname {}) | tail -n1" register: pg_cluster_result changed_when: false - name: Set PostgreSQL version and cluster facts set_fact: pg_version: "{{ pg_version_result.stdout | trim }}" pg_cluster: "main" - name: Define PostgreSQL cluster path set_fact: pg_cluster_path: "/etc/postgresql/{{ pg_version }}/{{ pg_cluster }}" pg_data_path: "/var/lib/postgresql/{{ pg_version }}/{{ pg_cluster }}" - name: Ensure cluster config directory exists file: path: "{{ pg_cluster_path }}" state: directory owner: postgres group: postgres mode: "0700" # --- Stop cluster before config --- - name: Stop PostgreSQL cluster shell: "pg_ctlcluster {{ pg_version }} {{ pg_cluster }} stop" ignore_errors: true # --- Ensure data directory exists --- - name: Create PostgreSQL data directory file: path: "{{ pg_data_path }}" state: directory owner: postgres group: postgres mode: "0700" # --- Ensure cluster exists --- - name: Ensure PostgreSQL cluster exists shell: "pg_createcluster {{ pg_version }} {{ pg_cluster }}" ignore_errors: true # --- Configure PostgreSQL --- - name: postgresql.conf template: src: postgresql.conf.j2 dest: "{{ pg_cluster_path }}/postgresql.conf" owner: postgres group: postgres mode: "0600" - name: pg_hba.conf template: src: pg_hba.conf.j2 dest: "{{ pg_cluster_path }}/pg_hba.conf" owner: postgres group: postgres mode: "0600" # --- Start cluster --- - name: Start PostgreSQL cluster shell: "pg_ctlcluster {{ pg_version }} {{ pg_cluster }} start" ignore_errors: true # --- Wait for socket to be ready --- - name: Wait for PostgreSQL socket wait_for: path: "/var/run/postgresql/{{ pg_version }}-{{ pg_cluster }}/.s.PGSQL.5432" timeout: 60 # --- Install Python PostgreSQL libraries --- - name: Install python postgres libraries apt: name: - python3-psycopg2 state: present update_cache: yes