- name: Ensure postgresql is installed
  ansible.builtin.apt:
    name:
      - postgresql
  become: true

- name: Ensure Python library for community.postgresql is installed if needed
  ansible.builtin.apt:
    name:
      - python3-psycopg
  become: true
  when: postgresql__dbs != [ ] or postgresql__users != [ ]

- name: Ensure users
  community.postgresql.postgresql_user:
    name: "{{ item.name }}"
    password: "{{ item.password | default('') }}"
  become: true
  become_user: postgres
  loop: "{{ postgresql__users }}"
  loop_control:
    label: "user {{ item.name }} with {{ 'a password' if item.password is defined else 'no password' }}"

- name: Ensure dbs with owners
  community.postgresql.postgresql_db:
    name: "{{ item.name }}"
    owner: "{{ item.owner }}"
  become: true
  become_user: postgres
  loop: "{{ postgresql__dbs }}"