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