- name: Create Docker network for PostgreSQL docker_network: name: "{{ applications | get_app_conf(application_id, 'network', True) }}" state: present ipam_config: - subnet: "{{ networks.local['svc-db-postgres'].subnet }}" when: run_once_docker_postgres is not defined - name: Install PostgreSQL docker_container: name: "{{ applications | get_app_conf(application_id, 'hostname', True) }}" image: "{{ applications | get_docker_image(application_id) }}" detach: yes env: POSTGRES_PASSWORD: "{{ applications | get_app_conf(application_id, 'credentials.postgres_password', True) }}" POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" # Necessary for web-app-matrix networks: - name: "{{ applications | get_app_conf(application_id, 'network', True) }}" published_ports: - "127.0.0.1:{{ applications | get_app_conf(application_id, 'port', True) }}:5432" volumes: - "{{ applications['svc-db-postgres'].volume }}:/var/lib/postgresql/data" restart_policy: "{{ docker_restart_policy }}" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 start_period: 30s register: setup_postgres_container_result when: run_once_docker_postgres is not defined - name: Wait for Postgres inside the container shell: "docker exec {{ applications | get_app_conf(application_id, 'hostname', True) }} pg_isready -U postgres" register: pg_ready until: pg_ready.rc == 0 retries: 30 delay: 5 when: - setup_postgres_container_result is defined - setup_postgres_container_result.changed - run_once_docker_postgres is not defined - name: install python-psycopg2 pacman: name: python-psycopg2 state: present when: run_once_docker_postgres is not defined - name: Load database initialization tasks dynamically include_tasks: init_database.yml when: - database_username is defined - database_password is defined - database_name is defined - name: Run the docker_postgres tasks once set_fact: run_once_docker_postgres: true when: run_once_docker_postgres is not defined