--- # Instalacja PostgreSQL (najnowsza wersja) i konfiguracja klastra # Role: primary i replica - name: Install PostgreSQL and contrib packages apt: name: - postgresql - postgresql-contrib - python3-psycopg2 update_cache: yes state: present # --- Auto-detect PostgreSQL version --- - name: Detect installed PostgreSQL version shell: "ls -d /etc/postgresql/*/ | head -1 | xargs basename" register: pg_version_detect changed_when: false failed_when: pg_version_detect.rc != 0 - name: Set PostgreSQL version variable set_fact: pg_version: "{{ pg_version_detect.stdout | trim }}" pg_cluster: "main" pg_data: "/var/lib/postgresql/{{ pg_version_detect.stdout | trim }}/main" pg_config_path: "/etc/postgresql/{{ pg_version_detect.stdout | trim }}/main" pg_bin_path: "/usr/lib/postgresql/{{ pg_version_detect.stdout | trim }}/bin" - name: Display detected PostgreSQL version debug: msg: "PostgreSQL {{ pg_version }} detected. Data path: {{ pg_data }}" # --- Tworzenie logów PostgreSQL --- - name: Ensure log directory exists file: path: /var/log/postgresql state: directory owner: postgres group: postgres mode: "0755" # --- Inicjalizacja klastra --- - name: Check if cluster data directory exists stat: path: "{{ pg_data }}" register: pg_data_stat - name: Create cluster data directory if not exists file: path: "{{ pg_data }}" state: directory owner: postgres group: postgres mode: "0700" when: not pg_data_stat.stat.exists - name: Initialize PostgreSQL cluster shell: "{{ pg_bin_path }}/initdb -D {{ pg_data }} --encoding=UTF8 --locale=en_US.UTF-8" become: true become_user: postgres when: not pg_data_stat.stat.exists register: initdb_result - name: Create config directory for cluster file: path: "{{ pg_config_path }}" state: directory owner: postgres group: postgres mode: "0755" # --- Konfiguracja PostgreSQL --- - name: Deploy postgresql.conf template: src: postgresql.conf.j2 dest: "{{ pg_config_path }}/postgresql.conf" owner: postgres group: postgres mode: "0600" notify: restart postgresql - name: Deploy pg_hba.conf template: src: pg_hba.conf.j2 dest: "{{ pg_config_path }}/pg_hba.conf" owner: postgres group: postgres mode: "0600" notify: restart postgresql # --- Uruchomienie PostgreSQL --- - name: Enable and start PostgreSQL service systemd: name: postgresql enabled: yes state: started daemon_reload: yes # --- Czekanie na socket --- - name: Wait for PostgreSQL socket to be ready wait_for: path: "/var/run/postgresql/.s.PGSQL.5432" timeout: 60 state: present # Handlery - name: restart postgresql systemd: name: postgresql state: restarted listen: "restart postgresql"