---

# Parameters:
#   playbook inventory
#     stage := the name of the stage (e.g. devnso, qanso, prodnso)
#     source_project := project to use in source regoistry
#     source_image_name := image name to pull from source regoistry
#     source_image_version := image version to pull from source regoistry
#     destination_project := project to use in destination regoistry, default source_project
#     destination_image_name := (optional) image name for push to destination regoistry, default source_image_name
#     destination_image_version := (optional) image version for push to destination regoistry, source_image_version
#   smardigo message callback
#     scope_id := (scope id of the management process)
#     process_instance_id := (process instance id of the management process)
#     smardigo_management_action := (smardigo management action anme of the management process)

#############################################################
#   Creating inventory dynamically for given parameters
#############################################################

- hosts: localhost
  gather_facts: false
  connection: local

  pre_tasks:
    - name: "Import constraints check"
      import_tasks: tasks/constraints_check.yml
      become: false
      tags:
        - always

#     add virtual server to load stage specific variables as context
    - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts"
      add_host:
        name: "{{ stage }}-virtual-host-to-read-groups-vars"
        groups:
        - "stage_{{ stage }}"
      changed_when: False

#############################################################
#   Creating inventory dynamically for given parameters
#############################################################

- hosts: "{{ stage }}-virtual-host-to-read-groups-vars"
  serial: "{{ serial_number | default(1) }}"
  gather_facts: false
  connection: local

  pre_tasks:
    - name: "Import autodiscover pre-tasks"
      import_tasks: tasks/autodiscover_pre_tasks.yml
      become: false
      tags:
        - always

  tasks:
    - name: "Add all servers for stage {{ stage }} to inventory"
      add_host:
        name: "{{ item.name }}"
        groups:
        - "stage_{{ stage }}"
        - "{{ item.service }}"
        stage_server_infos: "{{ stage_server_infos }}"
      changed_when: False
      with_items: "{{ stage_server_infos }}"

#############################################################
#   
#############################################################

- hosts: "{{ stage }}-harbor-01"
  serial: "{{ serial_number | default(1) }}"
  vars:
    ansible_ssh_host: "{{ stage_server_domain }}"

  tasks:
    - fail:
        msg: "Variable '{{ item }}' is not defined"
      when:
        item not in hostvars[inventory_hostname]
      with_items:
        - source_project
        - source_image_name
        - source_image_version

    - name: "Pull/Tag/Push image <{{ source_project }}/{{ source_image_name }}:{{ source_image_version }}>"
      community.docker.docker_image:
        name: "dev-harbor-01.smardigo.digital/{{ source_project }}/{{ source_image_name }}:{{ source_image_version }}"
        repository: "{{ shared_service_hostname_harbor }}/{{ destination_project | default(source_project) }}/{{ destination_image_name | default(source_image_name) }}:{{ destination_image_version | default(source_image_version) }}"
        force_tag: true
        source: pull
        push: true

#############################################################
#   Sending smardigo management message to process
#############################################################

- hosts: "{{ stage }}-virtual-host-to-read-groups-vars"
  serial: "{{ serial_number | default(1) }}"
  gather_facts: false
  connection: local
  run_once: true
  vars:
    connect_jwt_username: "{{ management_admin_username }}"

  tasks:
    - name: "Sending smardigo management message to <{{ shared_service_url_management }}>"
      include_tasks: tasks/smardigo_management_message.yml
