INSIGHT-MVP/repos/INSIGHT-Infra/ansible/roles/postgresql/tasks/main.yml
Thomas Reitz 36196457ea feat(infra): vollständige Ansible-Struktur Phase 1
- Alle Ansible-Rollen erstellt: common, disk_setup, docker, postgresql,
  pgbouncer, redis, nginx, zabbix_agent
- ansible.cfg mit Pipeline-Optimierung
- hosts.yml mit echten IPs (DBS01=.20, APS01=.21, WEB01=.22)
- group_vars für alle Server (dbs, aps, web)
- Zabbix-Server auf sentinel.xinion.de gesetzt
- vault.yml.example als Vorlage für Secrets
- site.yml nutzt import_playbook (DBS01→APS01→WEB01)
- BRIEFING.md für alle 4 Repos angelegt (Platform, Apps, Infra, Shared)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 15:23:29 +01:00

121 lines
3.2 KiB
YAML

---
# Role: postgresql
# Installiert und konfiguriert PostgreSQL 16 auf DBS01
- name: "PostgreSQL GPG Key hinzufügen"
apt_key:
url: https://www.postgresql.org/media/keys/ACCC4CF8.asc
state: present
- name: "PostgreSQL Repository hinzufügen"
apt_repository:
repo: "deb http://apt.postgresql.org/pub/repos/apt {{ ansible_distribution_release }}-pgdg main"
state: present
filename: pgdg
- name: "PostgreSQL {{ postgresql_version }} installieren"
apt:
name:
- "postgresql-{{ postgresql_version }}"
- "postgresql-client-{{ postgresql_version }}"
- "postgresql-contrib-{{ postgresql_version }}"
- python3-psycopg2
state: present
update_cache: true
- name: "PostgreSQL Data-Verzeichnis anlegen"
file:
path: "{{ postgresql_data_dir }}"
state: directory
owner: postgres
group: postgres
mode: '0700'
when: postgresql_data_dir != '/var/lib/postgresql'
- name: "PostgreSQL Service stoppen (vor Konfiguration)"
service:
name: "postgresql@{{ postgresql_version }}-main"
state: stopped
when: postgresql_data_dir != '/var/lib/postgresql'
- name: "Prüfen ob PostgreSQL Cluster bereits initialisiert"
stat:
path: "{{ postgresql_data_dir }}/PG_VERSION"
register: pg_cluster_initialized
- name: "PostgreSQL Cluster in Data-Dir initialisieren"
become_user: postgres
command: >
/usr/lib/postgresql/{{ postgresql_version }}/bin/initdb
-D {{ postgresql_data_dir }}
when:
- postgresql_data_dir != '/var/lib/postgresql'
- not pg_cluster_initialized.stat.exists
- name: "postgresql.conf konfigurieren"
template:
src: postgresql.conf.j2
dest: "/etc/postgresql/{{ postgresql_version }}/main/postgresql.conf"
owner: postgres
group: postgres
mode: '0644'
notify: restart postgresql
- name: "pg_hba.conf konfigurieren"
template:
src: pg_hba.conf.j2
dest: "/etc/postgresql/{{ postgresql_version }}/main/pg_hba.conf"
owner: postgres
group: postgres
mode: '0640'
notify: reload postgresql
- name: "PostgreSQL Service aktivieren und starten"
service:
name: "postgresql@{{ postgresql_version }}-main"
state: started
enabled: true
- name: "PostgreSQL INSIGHT Datenbanken anlegen"
become_user: postgres
postgresql_db:
name: "{{ item }}"
encoding: UTF8
lc_collate: de_DE.UTF-8
lc_ctype: de_DE.UTF-8
template: template0
state: present
loop: "{{ postgresql_databases }}"
when: postgresql_databases is defined
- name: "PostgreSQL INSIGHT User anlegen"
become_user: postgres
postgresql_user:
name: "{{ item.name }}"
password: "{{ item.password }}"
role_attr_flags: "{{ item.role_attr_flags | default('LOGIN') }}"
state: present
loop: "{{ postgresql_users }}"
when: postgresql_users is defined
no_log: true
- name: "PostgreSQL Berechtigungen setzen"
become_user: postgres
postgresql_privs:
db: "{{ item.db }}"
role: "{{ item.role }}"
privs: "{{ item.privs }}"
type: database
state: present
loop: "{{ postgresql_grants }}"
when: postgresql_grants is defined
- name: "PostgreSQL Version prüfen"
become_user: postgres
command: psql --version
register: pg_version
changed_when: false
- name: "PostgreSQL Version ausgeben"
debug:
msg: "{{ pg_version.stdout }}"