--- - name: Deploy Docker Service Configurations (Optimized & Vault-ready) hosts: - rinoa - rikku - benedikta gather_facts: false vars: template_base_path: "{{ playbook_dir }}/../app-configs" pre_tasks: - name: Gather files for all hosts (on localhost) find: paths: "{{ template_base_path }}/{{ item }}" recurse: true loop: "{{ ansible_play_hosts }}" loop_control: loop_var: item register: files_per_host delegate_to: localhost changed_when: false tasks: - name: Deploy files to each host vars: host_files: "{{ files_per_host.results | selectattr('item','equalto',inventory_hostname) | map(attribute='files') | first }}" dest_dirs: >- {{ host_files | map(attribute='path') | map('relpath', template_base_path ~ '/' ~ inventory_hostname) | map('dirname') | map('regex_replace', '^(.*)$', appdata_base_path ~ '/\\1') | unique | list }} block: - name: Ensure destination directories exist file: path: "{{ item }}" state: directory mode: '0755' loop: "{{ dest_dirs }}" - name: Deploy Jinja2 templates template: src: "{{ item.path }}" dest: "{{ appdata_base_path }}/{{ item.path | relpath(template_base_path ~ '/' ~ inventory_hostname) | regex_replace('\.j2$', '') }}" mode: '0644' loop: "{{ host_files }}" when: item.path.endswith('.j2') - name: Deploy static files copy: src: "{{ item.path }}" dest: "{{ appdata_base_path }}/{{ item.path | relpath(template_base_path ~ '/' ~ inventory_hostname) }}" mode: '0644' remote_src: false loop: "{{ host_files }}" when: not item.path.endswith('.j2')