--- # Role: postgresql # Installiert und konfiguriert PostgreSQL 16 auf DBS01 # Daten werden vom Default-Cluster nach {{ postgresql_data_dir }} verschoben - name: "de_DE.UTF-8 Locale generieren" locale_gen: name: de_DE.UTF-8 state: present - name: "rsync installieren (für Datenmigration)" apt: name: rsync state: present - 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: "Prüfen ob Data-Dir bereits PostgreSQL-Daten enthält" stat: path: "{{ postgresql_data_dir }}/PG_VERSION" register: pg_data_exists - name: "PostgreSQL Service stoppen (für Datenmigration in /data)" service: name: "postgresql@{{ postgresql_version }}-main" state: stopped when: - postgresql_data_dir != '/var/lib/postgresql/' ~ postgresql_version ~ '/main' - not pg_data_exists.stat.exists - 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/' ~ postgresql_version ~ '/main' - not pg_data_exists.stat.exists - name: "PostgreSQL Default-Cluster nach {{ postgresql_data_dir }} kopieren" command: > rsync -a --delete /var/lib/postgresql/{{ postgresql_version }}/main/ {{ postgresql_data_dir }}/ when: - postgresql_data_dir != '/var/lib/postgresql/' ~ postgresql_version ~ '/main' - not pg_data_exists.stat.exists - name: "Berechtigungen auf Data-Dir sicherstellen" file: path: "{{ postgresql_data_dir }}" owner: postgres group: postgres mode: '0700' when: postgresql_data_dir != '/var/lib/postgresql/' ~ postgresql_version ~ '/main' - name: "postgresql.conf konfigurieren (inkl. data_directory)" 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: "Warten bis PostgreSQL bereit ist" wait_for: host: localhost port: "{{ postgresql_port | default(5432) }}" timeout: 30 - 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 Datenbankberechtigungen 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 ausgeben" become_user: postgres command: psql --version register: pg_version changed_when: false - name: "PostgreSQL bereit" debug: msg: "{{ pg_version.stdout }} — Data-Dir: {{ postgresql_data_dir }}"