---

- name: Check if node_exporter service exists
  ansible.builtin.command: systemctl status node_exporter
  register: node_exporter_service_check
  changed_when: false
  failed_when: false

- name: Download node_exporter
  ansible.builtin.get_url:
    url: "{{ node_exporter_download_url }}"
    dest: "{{ node_exporter_download_dest }}"
    mode: "0755"
  when: node_exporter_service_check.rc != 0

- name: Ensure extraction directory exists
  ansible.builtin.file:
    path: "{{ node_exporter_extract_dest }}"
    state: directory
    mode: "0755"
  when: node_exporter_service_check.rc != 0

- name: Extract node_exporter
  ansible.builtin.unarchive:
    src: "{{ node_exporter_download_dest }}"
    dest: "{{ node_exporter_extract_dest }}"
    remote_src: true
    mode: "0755"
  when: node_exporter_service_check.rc != 0

- name: Ensure node_exporter user exists
  ansible.builtin.user:
    name: node_exporter
    state: present
    system: true
    shell: /bin/false
    create_home: false
  when: node_exporter_service_check.rc != 0

- name: Move node_exporter to executable path
  ansible.builtin.command:
    cmd: cp "{{ node_exporter_extract_dest }}/node_exporter-{{ node_exporter_version }}.{{ node_exporter_arch }}/node_exporter" "{{ node_exporter_executable_path }}"
  args:
    creates: "{{ node_exporter_executable_path }}"
  when: node_exporter_service_check.rc != 0

- name: Set executable permissions on node_exporter
  ansible.builtin.file:
    path: "{{ node_exporter_executable_path }}"
    mode: "0755"
  when: node_exporter_service_check.rc != 0

- name: Clean up downloaded archive
  ansible.builtin.file:
    path: "{{ node_exporter_download_dest }}"
    state: absent
  when: node_exporter_service_check.rc != 0

- name: Clean up extracted directory
  ansible.builtin.file:
    path: "{{ node_exporter_extract_dest }}"
    state: absent
  when: node_exporter_service_check.rc != 0

- name: Copy node_exporter.service
  ansible.builtin.template:
    src: node_exporter.service.j2
    dest: /etc/systemd/system/node_exporter.service
    owner: root
    group: root
    mode: "0644"
  when: node_exporter_service_check.rc != 0

- name: Enable and start node_exporter
  ansible.builtin.systemd:
    name: node_exporter
    enabled: true
    state: started

- name: Verify node_exporter service is running
  ansible.builtin.uri:
    url: "http://localhost:9100/metrics"
    method: GET
    status_code: [200]
  retries: 10
  delay: 5
