- name: Install PostgreSQL packages apt: name: - postgresql - postgresql-contrib update_cache: yes # --- Dynamiczne wykrywanie wersji PostgreSQL --- - name: Detect PostgreSQL clusters shell: "pg_lsclusters --no-header | awk '{print $1, $2}' | head -n1" register: pg_cluster_info changed_when: false - name: Set PostgreSQL version and cluster facts set_fact: pg_version: "{{ pg_cluster_info.stdout.split()[0] }}" pg_cluster: "{{ pg_cluster_info.stdout.split()[1] }}" - 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 # --- Configure PostgreSQL --- - name: postgresql.conf template: src: postgresql.conf.j2 dest: "{{ pg_cluster_path }}/postgresql.conf" - name: pg_hba.conf template: src: pg_hba.conf.j2 dest: "{{ pg_cluster_path }}/pg_hba.conf" # --- Ensure cluster exists and started --- - name: Ensure PostgreSQL cluster exists shell: | if [ ! -d "{{ pg_data_path }}" ]; then pg_createcluster {{ pg_version }} {{ pg_cluster }} --start else pg_ctlcluster {{ pg_version }} {{ pg_cluster }} start fi # --- 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