---
- name: Include OS-specific variables.
  ansible.builtin.include_vars: "{{ ansible_os_family }}.yml"

- name: Install apt-transport-https package
  ansible.builtin.apt:
      name: apt-transport-https
      install_recommends: false
      state: latest
  when: ansible_os_family == "Debian"

- name: Install OS packages
  ansible.builtin.package:
      name: "{{ packages_to_install }}"
      state: latest
  async: 120
  poll: 10
  when: not ansible_check_mode

- name: Check installed OS packages
  ansible.builtin.package:
      name: "{{ packages_to_install }}"
      state: latest
  when: ansible_check_mode

- name: Create /etc/docker repo
  ansible.builtin.file:
      name: /etc/docker
      state: directory
      owner: root
      group: root
      mode: '0755'

- name: Securize docker daemon
  ansible.builtin.template:
      src: daemon.json.j2
      dest: /etc/docker/daemon.json
      owner: root
      group: root
      mode: '0644'
  notify:
      - Restart docker daemon

- name: Create .docker repo
  ansible.builtin.file:
      name: /root/.docker
      state: directory
      owner: root
      group: root
      mode: '0750'
  when: docker_registry_auth is defined

- name: Add specific repo auth
  ansible.builtin.copy:
      content: "{{ docker_registry_auth }}"
      dest: /root/.docker/config.json
      owner: root
      group: root
      mode: '0644'
  when: docker_registry_auth is defined

- name: Create docker repo
  tags:
    - "backup_odoo"
  ansible.builtin.file:
      name: /home/docker/backups
      state: directory
      owner: root
      group: root
      mode: '0755'

## Install Proxy docker
- name: Create Inverse Proxy docker structure on server in /home/docker/inverseproxy
  ansible.builtin.file:
      name: /home/docker/inverseproxy
      state: directory
      owner: root
      group: root
      mode: '0755'
  tags:
    - "docker_proxy"
    - "metabase"

- name: Install proxy docker
  ansible.builtin.template:
      src: inverseproxy.yaml.j2
      dest: /home/docker/inverseproxy/docker-compose.yaml
      owner: root
      group: root
      mode: '0644'
  tags:
    - "docker_proxy"
    - "metabase"
  notify:
      - Start inverseproxy docker

- name: Copy Traefik configuration file
  ansible.builtin.template:
      src: traefik.toml.j2
      dest: "/home/docker/inverseproxy/traefik.toml"
      owner: root
      group: root
      mode: '0644'
  tags:
    - "docker_proxy"
    - "metabase"
  notify:
      - Start inverseproxy docker

- name: Copy Docker Facts Collection script on server
  ansible.builtin.template:
      src: collect_docker_facts.sh.j2
      dest: /root/collect_docker_facts.sh
      owner: root
      group: root
      mode: '0700'

- name: Add cron job to check Docker versions every day
  ansible.builtin.cron:
      name: collect docker facts
      minute: "1"
      hour: "2"
      job: /root/collect_docker_facts.sh

# Flush handlers in order to be able to restart docker daemon with new config and retrieve vars
- name: Flush handlers
  ansible.builtin.meta: flush_handlers

- name: Enable service docker
  ansible.builtin.service:
      name: docker
      enabled: true

- name: Start service docker, if not started
  ansible.builtin.service:
      name: docker
      state: started

- name: Retrieve subuid for dockremap
  ansible.builtin.command: grep dockremap /etc/subuid
  register: dockremap_subuid_output
  when: docker_userns_remap

- name: Retrieve subgid for dockremap
  ansible.builtin.command: grep dockremap /etc/subgid
  register: dockremap_subgid_output
  when: docker_userns_remap

- name: Save uid to hostvars for dockremap user
  ansible.builtin.lineinfile:
      name: "{{ inventory_dir }}/host_vars/{{ inventory_hostname }}"
      regexp: "dockremap_subuid:"
      line: "dockremap_subuid: {{ dockremap_subuid_output.stdout.split(':')[1] }}"
      create: true
      mode: '0664'
  connection: local
  become: false
  delegate_to: localhost
  when: docker_userns_remap and dockremap_subuid_output.stdout is defined and not ansible_check_mode

- name: Save gid to hostvars for dockremap user
  ansible.builtin.lineinfile:
      name: "{{ inventory_dir }}/host_vars/{{ inventory_hostname }}"
      regexp: "dockremap_subgid:"
      line: "dockremap_subgid: {{ dockremap_subgid_output.stdout.split(':')[1] }}"
      create: true
      mode: '0664'
  connection: local
  become: false
  delegate_to: localhost
  when: docker_userns_remap and dockremap_subgid_output.stdout is defined and not ansible_check_mode