--- - name: 'Include vars for "{{ service }}" service' include_vars: "{{ service_vars_file }}" with_fileglob: "{{ service_path }}/vars/*" loop_control: loop_var: service_vars_file tags: - always - name: 'Override "{{ service }}" service vars with local config' set_fact: '{{ variable.key }}': '{{ variable.value }}' with_dict: "{{ service_config[service]|default({}) }}" loop_control: loop_var: variable label: "{{ variable.key }}" tags: - always - name: 'Ensure "{{ service }}" service config directory exist' file: path: "{{ remote_service_path }}/config" state: directory recurse: true owner: "{{ ansible_user }}" tags: - always - name: 'Load configuration tasks for "{{ service }}"' include_tasks: "{{ service_task_file }}" with_fileglob: "{{ service_path }}/tasks/*" loop_control: loop_var: service_task_file when: service_task_file|basename is not regex('^_') tags: - always - name: 'Copy stack file of "{{ service }}" to remote server' template: src: "{{ service_path }}/stack.yml" dest: "{{ remote_service_path }}/stack.yml" tags: - deploy - name: 'Deploy "{{ service }}" stack to docker' community.docker.docker_stack: name: "{{ service }}" prune: yes resolve_image: "always" with_registry_auth: yes compose: - "{{ remote_service_path }}/stack.yml" - version: "{{ compose_version }}" networks: "{{ dict(swarm_global_networks | map(attribute='name') | zip_longest([], fillvalue={ 'external': True })) }}" register: stack tags: - deploy - name: "Mark updated services as restarted" set_fact: services_to_restart: "{{ services_to_restart | difference((stack.stack_spec_diff | default('{}') | from_json).keys()) }}" tags: - deploy