---
- name: "Deploy homepage application"
  hosts: all

  vars_files:
    - vars/ports.yml
    - vars/vars.yml

  vars:
    app_name: "homepage"
    base_dir: "/home/major/applications/{{ app_name }}/"
    docker_registry_prefix: "cr.yandex/crplfk0168i4o8kd7ade"
    homepage_web_image: "{{ homepage_web_image | default(omit) }}"

  tasks:
    - name: "Check is web service imape 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: "Create application directories"
      ansible.builtin.file:
        path: "{{ item }}"
        state: "directory"
        mode: "0755"
      loop:
        - "{{ base_dir }}"

    - name: "Copy application files"
      ansible.builtin.copy:
        src: "{{ item }}"
        dest: "{{ base_dir }}"
        mode: "0644"
      loop:
        - "./files/{{ app_name }}/docker-compose.yml"

    - name: "Set up environment variables for application"
      ansible.builtin.template:
        src: "env.j2"
        dest: '{{ (base_dir, ".env") | path_join }}'
        mode: "0644"
      vars:
        env_dict:
          WEB_SERVICE_IMAGE: "{{ registry_homepage_web_image }}"
          WEB_SERVICE_PORT: "{{ homepage_port }}"

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