# 2022-09-29: './runrole --reinstall azuracast' is NOT supported!
#
# 1. But if you must, first completely uninstall Docker + WIPE AzuraCast data:
#
#    apt purge docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-scan-plugin
#    rm -rf /library/docker /var/lib/docker /var/lib/containerd
#
#    Per https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine
#
# 2. REBOOT to avoid later problems with 'systemctl status docker' -- if you
#    don't reboot, Ansible will fail below when 'docker.sh install' fails to
#    start docker.service -- likewise if you run './docker.sh install-docker'
#    manually in /opt/azuracast.  Either way, 'systemctl restart docker' won't
#    work for ~2 minutes.  (Rebooting avoids all these hassles!)
#
# 3. Just FYI the Docker install process will rebuild its 11 core directories
#    in /var/lib/docker -> /library/docker: (as 'docker.sh install' begins)
#
#    buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes
#
# 4. Just FYI both MySQL passwords (MYSQL_PASSWORD & MYSQL_ROOT_PASSWORD) will
#    be WIPED from /opt/azuracast/azuracast.env (and new passwords
#    auto-generated below, for use inside AzuraCast's Docker container).
#
# 5. Run './runrole --reinstall azuracast' in /opt/iiab/iiab


- name: AzuraCast - Make config directory {{ azuracast_host_dir }}
  file:
    path: "{{ azuracast_host_dir }}"
    state: directory

- name: AzuraCast - Install {{ azuracast_host_dir }}/.env from template
  template:
    src: prod.env.j2
    dest: "{{ azuracast_host_dir }}/.env"

- name: AzuraCast - Install {{ azuracast_host_dir }}/azuracast.env for altered ports
  template:
    src: azuracast.env.j2
    dest: "{{ azuracast_host_dir }}/azuracast.env"

- name: AzuraCast - Download {{ docker_sh_url }} to {{ azuracast_host_dir }}
  get_url:
    url: "{{ docker_sh_url }}"
    dest: "{{ azuracast_host_dir }}/"
    mode: 0755
    timeout: "{{ download_timeout }}"

#- name: AzuraCast - Make changes to docker.sh script so it runs headless
#  lineinfile:
#    path: "{{ azuracast_host_dir }}/docker.sh"
#    regexp: "^(.*)read reply.*"
#    line: "\\1reply='Y'"
#    backrefs: yes

# 2022-09-28: https://docs.azuracast.com/en/getting-started/installation/docker
# (& testing) confirm this is done automatically by 'docker.sh install' below.
#
# - name: AzuraCast - Download AzuraCast's docker-compose.yml sample from GitHub to {{ azuracast_host_dir }}
#   get_url:
#     url: "{{ docker_compose_url }}"
#     dest: "{{ azuracast_host_dir }}/docker-compose.yml"
#     timeout: "{{ download_timeout }}"

#- name: AzuraCast - Install {{ azuracast_host_dir }}/docker-compose.override.yml from template
#  template:
#    src: docker-compose.override.yml.j2
#    dest: "{{ azuracast_host_dir }}/docker-compose.override.yml"

#- name: Change default port number range 8xxx:8xxx to {{ azuracast_port_range_prefix }}xxx:{{ azuracast_port_range_prefix }}xxx icecast-stations in docker-compose.yml
#  replace:
#    path: "{{ azuracast_host_dir }}/docker-compose.yml"
#    regexp: "^( *- \\')8([0-9]{3})\\:8([0-9]{3}\\'.*)$"
#    replace: "\\g<1>{{ azuracast_port_range_prefix }}\\g<2>:{{ azuracast_port_range_prefix }}\\g<3>"

- name: AzuraCast - Make directory {{ docker_container_dir }}
  file:
    path: "{{ docker_container_dir }}"
    state: directory

- name: AzuraCast - Symlink /var/lib/docker -> {{ docker_container_dir }}
  file:
    src: "{{ docker_container_dir }}"
    path: /var/lib/docker
    state: link

# 2022-09-28: "yes 'Y'" toggled whatever it found in /opt/azuracast/.env (e.g.
# AZURACAST_VERSION=stable from templates/prod.env.j2) to the opposite (e.g.
# AZURACAST_VERSION=latest).  Let's not modify /opt/azuracast/.env unless nec!
#
# - name: AzuraCast - Setup for stable channel install
#   shell: "yes 'Y' | /bin/bash docker.sh setup-release"
#   args:
#     chdir: "{{ azuracast_host_dir }}"

- name: AzuraCast - Run the installer
  shell: "yes '' | /bin/bash docker.sh install"
  args:
    chdir: "{{ azuracast_host_dir }}"


# RECORD AzuraCast AS INSTALLED

- name: "Set 'azuracast_installed: True'"
  set_fact:
    azuracast_installed: True

- name: "Add 'azuracast_installed: True' to {{ iiab_state_file }}"
  lineinfile:
    path: "{{ iiab_state_file }}"    # /etc/iiab/iiab_state.yml
    regexp: '^azuracast_installed'
    line: 'azuracast_installed: True'
