---

- name: Install needed tools
  package:
    name:
      - tar
      - zstd
      - unzip
      - acl
  tags: nomad

- name: Install task driver packages
  package: name={{ nomad_task_driver_packages[item] }}
  loop: "{{ nomad_enabled_task_drivers }}"
  when: nomad_task_driver_packages[item] is defined and nomad_conf.client.enabled
  notify: restart nomad
  tags: nomad

- when: nomad_install_mode == 'upgrade'
  name: Clear plugin dir on upgrades
  file: path={{ nomad_root_dir }}/plugins state={{ item }} owner={{ nomad_user }} group={{ nomad_user }}
  loop:
    - absent
    - directory
  tags: nomad

- when: nomad_install_mode != 'none'
  block:
    - name: Download nomad
      get_url:
        url: "{{ nomad_archive_url }}"
        dest: "{{ nomad_root_dir }}/tmp"
        checksum: sha256:{{ nomad_archive_sha256 }}

    - name: Extract the archive
      unarchive:
        src: "{{ nomad_root_dir }}/tmp/nomad_{{ nomad_version }}_linux_amd64.zip"
        dest: "{{ nomad_root_dir }}/tmp"
        remote_src: True

    - name: Install nomad binary
      copy:
        src: "{{ nomad_root_dir }}/tmp/nomad"
        dest: "{{ nomad_root_dir }}/bin/nomad"
        remote_src: True
        mode: 755
      notify: restart nomad

    - name: Link in /usr/local/bin
      file: src={{ nomad_root_dir }}/bin/nomad dest=/usr/local/bin/nomad state=link force=True

  tags: nomad

- when: nomad_install_mode != 'none' and nomad_conf.client.enabled
  block:

    - name: Download plugins
      get_url:
        url: "{{ nomad_plugins[item].archive_url }}"
        dest: "{{ nomad_root_dir }}/tmp"
        checksum: sha256:{{ nomad_plugins[item].sha256 }}
      register: nomad_plugin_dl
      loop: "{{ nomad_plugins.keys() | list }}"

    - name: Extract nomad plugins
      unarchive:
        src: "{{ item.dest }}"
        dest: "{{ nomad_root_dir }}/plugins/"
        remote_src: True
      loop: "{{ nomad_plugin_dl.results }}"
      when: item.dest | basename | splitext | last in ['.zip','.tgz', '.txz', '.tar.gz', '.tar.xz']
      notify: restart nomad

    - name: Copy nomad plugins
      copy:
        src: "{{ item.dest }}"
        dest: "{{ nomad_root_dir }}/plugins/"
        remote_src: True
      loop: "{{ nomad_plugin_dl.results }}"
      when: item.dest | basename | splitext | last not in ['.zip','.tgz', '.txz', '.tar.gz', '.tar.xz']
      notify: restart nomad

    - name: List installed plugins
      command: ls {{ nomad_root_dir }}/plugins/
      register: nomad_installed_plugins
      changed_when: False

    - name: Set permissions on plugins
      file: path={{ nomad_root_dir }}/plugins/{{ item }} owner=root group=root mode=755
      loop: "{{ nomad_installed_plugins.stdout_lines }}"

  tags: nomad

# Nomad looks for the qemu-system-x86_64 bin in $PATH
# so it needs to be available for Nomad to detect it
- name: Link qemu-kvm to qemu-system-x86_64
  file:
    src: /usr/libexec/qemu-kvm
    dest: /usr/local/bin/qemu-system-x86_64
    state: link
  when: nomad_conf.client.enabled and 'qemu' in nomad_enabled_task_drivers
  tags: nomad

- name: Install bash completion support
  copy:
    content: |
      complete -C {{ nomad_root_dir }}/bin/nomad nomad
    dest: /etc/bash_completion.d/nomad
    mode: 0644
  tags: nomad

- name: Deploy systemd service unit
  template: src=nomad.service.j2 dest=/etc/systemd/system/nomad.service
  register: nomad_unit
  notify: restart nomad
  tags: nomad

- name: Install consul-template unit
  template: src=consul-template-nomad.service.j2 dest=/etc/systemd/system/consul-template-nomad.service
  register: nomad_consul_tpl_unit
  notify: restart consul-template-nomad
  when: nomad_vault_secrets.pki.enabled or nomad_vault_secrets.consul_pki.enabled
  tags: nomad

- name: Install backup hooks
  template: src={{ item }}-backup.j2 dest=/etc/backup/{{ item }}.d/nomad mode=755
  loop:
    - pre
    - post
  tags: nomad

- name: Install iptables cleanup script
  copy: src=iptables_cleanup.pl dest={{ nomad_root_dir }}/bin/iptables_cleanup.pl mode=755
  tags: nomad

- name: Install iptables-nomad-cleanup unit
  template: src=iptables-nomad-cleanup.service.j2 dest=/etc/systemd/system/iptables-nomad-cleanup.service
  register: nomad_ipt_cleanup_unit
  tags: nomad

- name: Reload systemd
  systemd: daemon_reload=True
  when: nomad_unit.changed or nomad_ipt_cleanup_unit.changed or (nomad_consul_tpl_unit is defined and nomad_consul_tpl_unit.changed)
  tags: nomad

# This is needed for containers to be able to reach their own services through the host published port
- name: Install a script to set nomad bridge in promisc mode
  copy: src=50-nomad-promisc dest=/etc/NetworkManager/dispatcher.d/50-nomad-promisc mode=755
  tags: nomad

- name: Create host_volume directories
  file: path={{ item.path }} state=directory owner={{ item.owner | default(omit) }} group={{ item.group | default(omit) }} mode={{ item.mode | default(omit) }}
  loop: "{{ nomad_conf.client.host_volumes | default([]) }}"
  when: item.create | default(False)
  tags: nomad
