---
# Play 1: Setup environment for the application
- name: "Setup environment for homepage application"
  hosts: all
  vars_files:
    - vars/ports.yml
    - vars/vars.yml
    - vars/homepage.yml
  tags:
    - setup
  tasks:
    - name: "Create user and environment"
      ansible.builtin.import_role:
        name: owner
      vars:
        owner_name: "{{ app_user }}"
        owner_extra_groups:
          - "docker"
        owner_ssh_keys:
          - "{{ lookup('file', 'files/av_id_rsa.pub') }}"

    - name: "Login to yandex docker registry."
      ansible.builtin.script:
        cmd: "files/yandex-docker-registry-auth.sh"

# Play 2: Deploy the application
- name: "Deploy homepage application"
  hosts: all
  vars_files:
    - vars/ports.yml
    - vars/vars.yml
    - vars/homepage.yml
  tags:
    - deploy
  tasks:
    - name: "Check is web service image passed"
      ansible.builtin.assert:
        that:
          - "homepage_web_image is defined"
        fail_msg: 'You must pass variable "homepage_web_image"'

    - name: "Create full image name with container registry"
      ansible.builtin.set_fact:
        registry_homepage_web_image: "{{ (docker_registry_prefix, homepage_web_image) | path_join }}"

    - name: "Push web service image to remote registry"
      community.docker.docker_image:
        state: present
        source: local
        name: "{{ homepage_web_image }}"
        repository: "{{ registry_homepage_web_image }}"
        push: true
      delegate_to: 127.0.0.1

    - name: "Copy docker compose file"
      ansible.builtin.template:
        src: "./files/{{ app_name }}/docker-compose.yml.j2"
        dest: "{{ base_dir }}/docker-compose.yml"
        owner: "{{ app_user }}"
        group: "{{ app_user }}"
        mode: "0640"

    - name: "Run application with docker compose"
      community.docker.docker_compose_v2:
        project_src: "{{ base_dir }}"
        state: "present"
        remove_orphans: true