- name: Install PostgreSQL packages apt: name: - postgresql - postgresql-contrib update_cache: yes # --- Dynamiczne wykrywanie wersji PostgreSQL --- - name: Detect installed PostgreSQL version find: paths: /etc/postgresql file_type: directory depth: 1 register: pg_version_dirs - name: Set PostgreSQL version fact set_fact: pg_version: "{{ pg_version_dirs.files | map(attribute='path') | map('basename') | sort | last }}" - name: Detect cluster name shell: "pg_lsclusters --no-header | awk '{print $2}' | head -n1" register: pg_cluster_name changed_when: false - set_fact: pg_cluster: "{{ pg_cluster_name.stdout }}" - name: Define PostgreSQL cluster path set_fact: pg_cluster_path: "/etc/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 "/var/lib/postgresql/{{ pg_version }}/{{ pg_cluster }}" ]; 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