---
- name: Ensure container '{{ postgresql_container_name }}' is {{ postgresql_container_state }} to initialise the database
  community.docker.docker_container:
    name: "{{ postgresql_container_name }}"
    image: "{{ postgresql_container_image }}"
    env: >-2
      {{ postgresql_container_env | default({}, true)
         | combine({'POSTGRES_PASSWORD': postgresql_superuser_password}) }}
    user: "{{ postgresql_container_user | default(omit, true) }}"
    ports: "{{ postgresql_container_ports | default(omit, true) }}"
    labels: "{{ postgresql_container_labels | default(omit, true) }}"
    volumes: "{{ postgresql_container_initdb_volumes }}"
    recreate: "{{ postgresql_container_recreate | default(omit, true) }}"
    networks: "{{ postgresql_container_networks | default(omit, true) }}"
    etc_hosts: "{{ postgresql_container_etc_hosts | default(omit, true) }}"
    memory: "{{ postgresql_container_memory | default(omit, true) }}"
    memory_reservation: "{{ postgresql_container_memory_reservation | default(omit, true) }}"
    oom_killer: "{{ postgresql_container_oom_killer | default(omit, true) }}"
    oom_score_adj: "{{ postgresql_container_oom_score_adj | default(omit, true) }}"
    shm_size: "{{ postgresql_container_shm_size | default(omit, true) }}"
    ulimits: "{{ postgresql_container_ulimits | default(omit, true) }}"
    restart_policy: "{{ postgresql_container_restart_policy | default(omit, true) }}"
    state: "{{ postgresql_container_state }}"
  register: postgresql_container_info

- name: Wait for container startup
  block:
    - name: Wait for container startup (socket)
      ansible.builtin.wait_for:
        path: "{{ postgresql_config_unix_socket_directories | first  }}/.s.PGSQL.{{ postgresql_config_port }}"
      when: "postgresql_config_connect_socket | bool"
    - name: Wait for container startup (port)
      ansible.builtin.wait_for:
        host: >-2
          {{ (pg_addresses == '*') | ternary(
                 omit,
                 postgresql_config_listen_addresses | first
             ) }}
        port: "{{ postgresql_config_port }}"
      when: "not postgresql_config_connect_socket | bool"
      vars:
        pg_addresses: "{{ postgresql_config_listen_addresses | join(',') }}"

- name: Ensure init container '{{ postgresql_container_name }}' is removed
  community.docker.docker_container:
    name: "{{ postgresql_container_name }}"
    state: absent