---

- name: Install needed packages
  become: true
  ansible.builtin.apt:
    name:
      - postgresql
      - postfix-pgsql
      - python3-psycopg2
      - acl

- name: Create postgresql users
  become: true
  become_user: postgres
  loop:
    - "{{ mailserver_database.admin_user }}"
    - "{{ mailserver_database.ro_user }}"
  community.postgresql.postgresql_user:
    name: "{{ item.name }}"
    state: present
    password: "{{ item.pwd }}"

- name: Create postgresql database
  become: true
  become_user: postgres
  community.postgresql.postgresql_db:
    name: "{{ mailserver_database.db }}"
    owner: "{{ mailserver_database.admin_user.name }}"
    state: present

- name: Upload postgresql tables script
  become: true
  become_user: postgres
  ansible.builtin.template:
    src: tables.sql.j2
    dest: ~/mailserver_tables.sql
    mode: "600"
  notify: Create postgresql tables

- name: Make sure tables are created before setting permissions
  ansible.builtin.meta: flush_handlers

- name: Set privileges for postgresql RO user
  become: true
  become_user: postgres
  community.postgresql.postgresql_privs:
    database: "{{ mailserver_database.db }}"
    roles: "{{ mailserver_database.ro_user.name }}"
    privs: select
    objs: ALL_IN_SCHEMA
    state: present

- name: Upload mailserver-manage.sh script
  become: true
  ansible.builtin.template:
    src: mailserver-manage.sh.j2
    dest: /usr/local/bin/mailserver-manage.sh
    mode: "700"