---
- name: 'Include vars for "{{ service }}" service'
  include_vars: "{{ service_vars_file }}"
  with_fileglob: "{{ services_root }}/{{ service }}/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
  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: "{{ services_root }}/{{ service }}/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: "{{ services_root }}/{{ service }}/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"
    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