--- # Attach this app's network to the shared Postgres unit, and make sure the # database exists. - name: Attach Nextcloud to Postgres ansible.builtin.include_tasks: "{{ playbook_dir }}/../postgres/roles/attach/tasks/main.yaml" # The restart that joins Postgres to nextcloud_net is a handler, so by default it # would run at the end of the play — after the app has started and failed to # resolve `db`. Flushing first also applies the Caddy restart queued by the # register pre_task. Nothing is pending on later runs. - name: Apply the network change before starting Nextcloud ansible.builtin.meta: flush_handlers # Postgres ships one default database and only this app knows the name of its own, # so on a fresh cluster the installer would otherwise fail with "database # nextcloud does not exist". The retry is for the restart the flush above may have # just done. - name: Check whether the {{ pg_database }} database exists ansible.builtin.command: >- podman exec -e PGPASSWORD={{ pg_password }} {{ postgres_container }} psql -U {{ pg_user }} -d postgres -tAc "select datname from pg_database where datname = '{{ pg_database }}'" register: nextcloud_db until: nextcloud_db.rc == 0 retries: 12 delay: 5 changed_when: false failed_when: false - name: Fail if the shared Postgres is not reachable ansible.builtin.assert: that: nextcloud_db.rc == 0 fail_msg: >- {{ postgres_container }} did not answer. Run postgres/playbook.yml on this host first — this play attaches to that cluster and creates its own database in it. - name: Create the {{ pg_database }} database ansible.builtin.command: >- podman exec -e PGPASSWORD={{ pg_password }} {{ postgres_container }} createdb -U {{ pg_user }} -O {{ pg_user }} {{ pg_database }} when: nextcloud_db.stdout | trim | length == 0