Files
PostgreSQL-Ansible/roles/postgres/tasks/main.yml
2026-01-29 14:27:03 +01:00

112 lines
2.8 KiB
YAML

---
# 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"