114 lines
3.2 KiB
YAML
114 lines
3.2 KiB
YAML
# Alliance Boréale - Rôle PostgreSQL
|
|
# Couche: C3 (dépendance pour PowerDNS)
|
|
# Objectif: Déployer PostgreSQL pour backend PowerDNS
|
|
# Date: 2025-10-31
|
|
|
|
---
|
|
- name: "📦 Install PostgreSQL and dependencies"
|
|
ansible.builtin.apt:
|
|
name:
|
|
- postgresql-{{ postgresql.version }}
|
|
- postgresql-contrib-{{ postgresql.version }}
|
|
- python3-psycopg2
|
|
state: present
|
|
update_cache: true
|
|
tags: postgresql
|
|
|
|
- name: "⚙️ Configure PostgreSQL"
|
|
ansible.builtin.template:
|
|
src: postgresql.conf.j2
|
|
dest: "/etc/postgresql/{{ postgresql.version }}/main/postgresql.conf"
|
|
owner: postgres
|
|
group: postgres
|
|
mode: '0644'
|
|
notify: restart postgresql
|
|
tags: postgresql
|
|
|
|
- name: "⚙️ Configure pg_hba.conf"
|
|
ansible.builtin.template:
|
|
src: pg_hba.conf.j2
|
|
dest: "/etc/postgresql/{{ postgresql.version }}/main/pg_hba.conf"
|
|
owner: postgres
|
|
group: postgres
|
|
mode: '0640'
|
|
notify: restart postgresql
|
|
tags: postgresql
|
|
|
|
- name: "✅ Ensure PostgreSQL is started"
|
|
ansible.builtin.systemd:
|
|
name: postgresql
|
|
state: started
|
|
enabled: true
|
|
tags: postgresql
|
|
|
|
- name: "🗄️ Create PostgreSQL databases"
|
|
community.postgresql.postgresql_db:
|
|
name: "{{ item.name }}"
|
|
encoding: "{{ item.encoding | default('UTF8') }}"
|
|
lc_collate: "{{ item.lc_collate | default('en_US.UTF-8') }}"
|
|
lc_ctype: "{{ item.lc_ctype | default('en_US.UTF-8') }}"
|
|
state: present
|
|
loop: "{{ postgresql.databases }}"
|
|
become: true
|
|
become_user: postgres
|
|
tags: postgresql
|
|
|
|
- name: "👤 Create PostgreSQL users"
|
|
community.postgresql.postgresql_user:
|
|
name: "{{ item.name }}"
|
|
password: "{{ item.password }}"
|
|
state: present
|
|
loop: "{{ postgresql.users }}"
|
|
become: true
|
|
become_user: postgres
|
|
no_log: true
|
|
tags: postgresql
|
|
|
|
- name: "🔐 Grant database privileges"
|
|
community.postgresql.postgresql_privs:
|
|
database: "{{ item.name }}"
|
|
roles: "{{ item.owner }}"
|
|
type: database
|
|
privs: ALL
|
|
state: present
|
|
loop: "{{ postgresql.databases }}"
|
|
become: true
|
|
become_user: postgres
|
|
tags: postgresql
|
|
|
|
- name: "📊 Create backup directory"
|
|
ansible.builtin.file:
|
|
path: "{{ postgresql.backup.destination }}"
|
|
state: directory
|
|
owner: postgres
|
|
group: postgres
|
|
mode: '0750'
|
|
when: postgresql.backup.enabled | default(true)
|
|
tags: postgresql
|
|
|
|
- name: "📊 Configure backup cron job"
|
|
ansible.builtin.cron:
|
|
name: "PostgreSQL backup"
|
|
user: postgres
|
|
minute: "0"
|
|
hour: "2"
|
|
job: "pg_dumpall | gzip > {{ postgresql.backup.destination }}/postgres-$(date +\\%Y\\%m\\%d).sql.gz"
|
|
state: present
|
|
when: postgresql.backup.enabled | default(true)
|
|
tags: postgresql
|
|
|
|
- name: "🗑️ Configure backup retention (delete old backups)"
|
|
ansible.builtin.cron:
|
|
name: "PostgreSQL backup cleanup"
|
|
user: postgres
|
|
minute: "30"
|
|
hour: "2"
|
|
job: "find {{ postgresql.backup.destination }} -name 'postgres-*.sql.gz' -mtime +{{ postgresql.backup.retention_days }} -delete"
|
|
state: present
|
|
when: postgresql.backup.enabled | default(true)
|
|
tags: postgresql
|
|
|
|
- name: "✅ PostgreSQL role completed"
|
|
ansible.builtin.debug:
|
|
msg: "✅ PostgreSQL {{ postgresql.version }} configured on {{ inventory_hostname }}"
|
|
tags: postgresql
|