From cc25eae68765bca0021621502823e26a80b4a39e Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Mon, 5 Aug 2024 12:01:24 +0300 Subject: [PATCH] Add node_exporter ansible role --- .../roles/node_exporter/defaults/main.yaml | 7 +++ .../roles/node_exporter/handlers/main.yaml | 8 +++ .../roles/node_exporter/tasks/main.yaml | 58 +++++++++++++++++++ .../templates/node_exporter.service.j2 | 15 +++++ 4 files changed, 88 insertions(+) create mode 100644 data/ansible/roles/node_exporter/defaults/main.yaml create mode 100644 data/ansible/roles/node_exporter/handlers/main.yaml create mode 100644 data/ansible/roles/node_exporter/tasks/main.yaml create mode 100644 data/ansible/roles/node_exporter/templates/node_exporter.service.j2 diff --git a/data/ansible/roles/node_exporter/defaults/main.yaml b/data/ansible/roles/node_exporter/defaults/main.yaml new file mode 100644 index 000000000..1ff26c530 --- /dev/null +++ b/data/ansible/roles/node_exporter/defaults/main.yaml @@ -0,0 +1,7 @@ +--- +node_exporter_version: 1.8.2 +node_exporter_user: node_exporter +node_exporter_install_dir: /opt/node_exporter +node_exporter_web_listen_address: 0.0.0.0:9100 +node_exporter_service_enabled: false +node_exporter_service_state: stopped diff --git a/data/ansible/roles/node_exporter/handlers/main.yaml b/data/ansible/roles/node_exporter/handlers/main.yaml new file mode 100644 index 000000000..98d6f7da4 --- /dev/null +++ b/data/ansible/roles/node_exporter/handlers/main.yaml @@ -0,0 +1,8 @@ +--- +- name: Restart node_exporter + become: true + ansible.builtin.systemd_service: + name: node_exporter + state: restarted + daemon_reload: true + when: node_exporter_service_state == 'started' diff --git a/data/ansible/roles/node_exporter/tasks/main.yaml b/data/ansible/roles/node_exporter/tasks/main.yaml new file mode 100644 index 000000000..0cbcd7ec0 --- /dev/null +++ b/data/ansible/roles/node_exporter/tasks/main.yaml @@ -0,0 +1,58 @@ +--- +- name: Create node_exporter user + become: true + ansible.builtin.user: + name: '{{ node_exporter_user }}' + state: present + system: true + createhome: no + +- name: Check current node_exporter version + ansible.builtin.command: '{{ node_exporter_install_dir }}/node_exporter --version' + register: node_exporter_current_version + ignore_errors: true + changed_when: false + +- name: Remove existing node_exporter installation if version differs + become: true + ansible.builtin.file: + path: '{{ node_exporter_install_dir }}' + state: absent + when: node_exporter_current_version.rc == 0 and node_exporter_version not in node_exporter_current_version.stdout + +- name: Create node_exporter installation directory + become: true + ansible.builtin.file: + path: '{{ node_exporter_install_dir }}' + state: directory + owner: '{{ node_exporter_user }}' + group: '{{ node_exporter_user }}' + mode: '0755' + +- name: Download and extract node_exporter + become: true + ansible.builtin.unarchive: + src: 'https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz' + dest: '{{ node_exporter_install_dir }}' + remote_src: true + owner: '{{ node_exporter_user }}' + group: '{{ node_exporter_user }}' + extra_opts: [--strip-components=1] + notify: Restart node_exporter + when: node_exporter_current_version.rc != 0 or node_exporter_version not in node_exporter_current_version.stdout + +- name: Create node_exporter systemd service file + become: true + ansible.builtin.template: + src: node_exporter.service.j2 + dest: /etc/systemd/system/node_exporter.service + mode: '0644' + notify: Restart node_exporter + +- name: Ensure node_exporter service is in desired state + become: true + ansible.builtin.systemd_service: + name: node_exporter + state: '{{ node_exporter_service_state }}' + enabled: '{{ node_exporter_service_enabled }}' + when: node_exporter_service_state == 'stopped' or node_exporter_service_enabled == false diff --git a/data/ansible/roles/node_exporter/templates/node_exporter.service.j2 b/data/ansible/roles/node_exporter/templates/node_exporter.service.j2 new file mode 100644 index 000000000..a5caf0fe5 --- /dev/null +++ b/data/ansible/roles/node_exporter/templates/node_exporter.service.j2 @@ -0,0 +1,15 @@ +[Unit] +Description=Node Exporter +Wants=network-online.target +After=network-online.target + +[Service] +User={{ node_exporter_user }} +Group={{ node_exporter_user }} +Type=simple +ExecStart={{ node_exporter_install_dir }}/node_exporter \ + --web.listen-address={{ node_exporter_web_listen_address }} +Restart=always + +[Install] +WantedBy=multi-user.target