diff --git a/roles/sys-svc-compose/tasks/utils/_render_one_template_apply.yml b/roles/sys-svc-compose/tasks/utils/_render_one_template_apply.yml index 5a98d244af..2d05c9ecd7 100644 --- a/roles/sys-svc-compose/tasks/utils/_render_one_template_apply.yml +++ b/roles/sys-svc-compose/tasks/utils/_render_one_template_apply.yml @@ -31,20 +31,24 @@ register: _role_templates_slurp no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}" - - name: "[swarm] Place '{{ _tpl.dest }}' on the non-manager peers" - when: not (IS_STACK_HOST | bool) - block: - - name: "[swarm] Ensure parent directory exists on peer for '{{ _tpl.dest }}'" - ansible.builtin.file: - path: "{{ _tpl.dest | dirname }}" - state: directory - mode: "0755" + # Exception: a role included as a partner runs on the stack host alone, so a `not IS_STACK_HOST` body never evaluates anywhere and every worker stays without the file. + - name: "[swarm] Ensure parent directory of '{{ _tpl.dest }}' exists on every node" + ansible.builtin.file: + path: "{{ _tpl.dest | dirname }}" + state: directory + mode: "0755" + delegate_to: "{{ item }}" + loop: "{{ query('node_hosts') }}" + run_once: true - - name: "[swarm] Distribute '{{ _tpl.dest }}' to swarm peers" - ansible.builtin.copy: - content: "{{ _role_templates_slurp.content | b64decode }}" - dest: "{{ _tpl.dest }}" - owner: "{{ _tpl.owner }}" - group: "{{ _tpl.group }}" - mode: "{{ _tpl.mode }}" - no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}" + - name: "[swarm] Distribute '{{ _tpl.dest }}' to every node" + ansible.builtin.copy: + content: "{{ _role_templates_slurp.content | b64decode }}" + dest: "{{ _tpl.dest }}" + owner: "{{ _tpl.owner }}" + group: "{{ _tpl.group }}" + mode: "{{ _tpl.mode }}" + delegate_to: "{{ item }}" + loop: "{{ query('node_hosts') }}" + run_once: true + no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"