---

- name: Deploy nomad configuration
  block:
    - name: Deploy nomad configuration
      template:
        src: nomad.hcl.j2
        dest: "{{ nomad_root_dir }}/etc/nomad.hcl"
        owner: root
        group: "{{ nomad_user }}"
        mode: 0640
        backup: True
      register: nomad_main_conf
      notify: restart nomad

    - name: Deploy nomad reloadable configuration
      template:
        src: reload.hcl.j2
        dest: "{{ nomad_root_dir }}/etc/reload.hcl"
        owner: root
        group: "{{ nomad_user }}"
        mode: 0640
        backup: True
      register: nomad_reload_conf
      notify: reload nomad

    - name: Validate configuration
      command: nomad config validate {{ nomad_root_dir }}/etc/nomad.hcl {{ nomad_root_dir }}/etc/reload.hcl
      changed_when: False
      become_user: "{{ nomad_user }}"
      register: nomad_conf_validation

  rescue:
    - block:
        - name: Restore main configuration
          copy:
            src: "{{ nomad_main_conf.backup_file }}"
            dest: "{{ nomad_root_dir }}/etc/nomad.hcl"
            remote_src: True
            owner: root
            group: "{{ nomad_user }}"
            mode: 0640
          when: nomad_main_conf.backup_file is defined
  
        - name: Restore reloadable configuration
          copy:
            src: "{{ nomad_reload_conf.backup_file }}"
            dest: "{{ nomad_root_dir }}/etc/reload.hcl"
            remote_src: True
            owner: root
            group: "{{ nomad_user }}"
            mode: 0640
          when: nomad_reload_conf.backup_file is defined

  tags: nomad

- name: Fail if configuration validation failed
  fail:
    msg: "Failed to validate configuration: {{ nomad_conf_validation.stdout }}"
  when: nomad_conf_validation.rc != 0
  tags: nomad

# Now we remove the backup config to prevent nomad warning about invalid config files
- name: List backup conf
  shell: ls -1 {{ nomad_root_dir }}/etc/*.hcl.*
  failed_when: False
  changed_when: False
  register: nomad_backup_configs
  tags: nomad

- name: Remove backup configs
  file: path={{ item }} state=absent
  loop: "{{ nomad_backup_configs.stdout_lines }}"
  tags: nomad

