The playbook pulls the tag from the registry, creates the data root owned by the app user, runs the container with its config baked into the image, waits for health, then verifies the data directory as the app user so a permissions mistake surfaces at deploy time. Caddy is pointed at the app with a stable marker, so a temporary hostname can be checked beside the live site and the cutover is one invocation with the retire flags set.
40 lines
1.3 KiB
YAML
40 lines
1.3 KiB
YAML
---
|
|
- name: Check the Caddyfile exists
|
|
stat:
|
|
path: "{{ caddyfile_path }}"
|
|
register: menu_caddyfile
|
|
|
|
- name: Fail when Caddy is not where we expect it
|
|
fail:
|
|
msg: >-
|
|
{{ caddyfile_path }} is missing. Deploy the caddy playbook (which owns the
|
|
Caddy container and its config) before this one.
|
|
when: not menu_caddyfile.stat.exists
|
|
|
|
# blockinfile replaces whatever sits between its markers, so changing `vhost`
|
|
# updates the snippet in place. The sibling nginx-menu role only appended a
|
|
# block when its exact text was absent, which cannot change a proxy target.
|
|
- name: Point Caddy at the app
|
|
blockinfile:
|
|
path: "{{ caddyfile_path }}"
|
|
marker: "# {mark} ANSIBLE MANAGED: menu app ({{ site }})"
|
|
block: "{{ caddy_snippet }}"
|
|
create: no
|
|
notify: Reload Caddy
|
|
|
|
- name: Remove the snippet the nginx-menu playbook wrote for this vhost
|
|
# A different marker, written by a different role. Leaving it in place would
|
|
# leave Caddy with two blocks for the same hostname.
|
|
blockinfile:
|
|
path: "{{ caddyfile_path }}"
|
|
marker: "# {mark} Ansible managed Caddy snippet for {{ host }}"
|
|
state: absent
|
|
when: retire_nginx_snippet | bool
|
|
notify: Reload Caddy
|
|
|
|
- name: Stop the old nginx container
|
|
docker_container:
|
|
name: "{{ legacy_container }}"
|
|
state: stopped
|
|
when: retire_nginx_container | bool
|