---
- name: "π restart Frappe containers (compose mode)"
ansible.builtin.shell: |
set -euo pipefail
container restart \
{{ ERPNEXT_BACKEND_CONTAINER }} \
{{ ERPNEXT_FRONTEND_CONTAINER }} \
{{ ERPNEXT_WEBSOCKET_CONTAINER }} \
{{ ERPNEXT_SCHEDULER_CONTAINER }} \
{{ ERPNEXT_QUEUE_SHORT_CONTAINER }} \
{{ ERPNEXT_QUEUE_LONG_CONTAINER }}
changed_when: false
when: IS_COMPOSE_MODE
- name: "π restart Frappe services (swarm mode)"
ansible.builtin.command: >-
container service update --force {{ entity_name }}_{{ item }}
loop:
- backend
- frontend
- websocket
- scheduler
- queue-short
- queue-long
changed_when: false
timeout: "{{ lookup('timeout', 600) | int }}"
when: IS_SWARM_MODE
- name: "π Re-resolve ERPNext backend node + CID after restart"
ansible.builtin.include_tasks: "{{ lookup('path_absolute', 'roles/sys-svc-compose/tasks/utils/swarm/resolve_host_cid.yml') }}"
vars:
resolve_service_key: backend
resolve_output_prefix: ERPNEXT_BACKEND
resolve_compose_cid: "{{ ERPNEXT_BACKEND_CONTAINER }}"
resolve_converge_retries: 60
resolve_converge_delay: 5
- name: "β³ wait for {{ ERPNEXT_BACKEND_CONTAINER }} gunicorn TCP port after restart"
ansible.builtin.shell: |
set -eo pipefail
# nocheck: container-exec-resolver runtime-resolved CID, delegated to the hosting node
container exec {{ ERPNEXT_BACKEND_LOCAL_CID | quote }} \
bash -c 'exec 3<>/dev/tcp/localhost/{{ ERPNEXT_BACKEND_PORT }} && exec 3<&- 3>&-'
delegate_to: "{{ ERPNEXT_BACKEND_HOST_NODE }}"
register: erpnext_backend_ready_post_restart
changed_when: false
retries: 60
delay: 5
until: erpnext_backend_ready_post_restart.rc == 0