alliance-boreale/ansible/roles/postgresql/tasks/main.yml
Dan Allaire bb38f846cd
Some checks are pending
CI / yaml-lint (push) Waiting to run
CI / ssot-export (push) Waiting to run
CI / tests (push) Waiting to run
CI / docs (push) Waiting to run
Premiers rôles ansible et leurs playbooks de déploiement (Phases 1 et 2)
2025-11-01 17:57:46 -04:00

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