Merge pull request #36 from corvus-migratorius/role-node-exporter
Add the `node_exporter` role
This commit is contained in:
34
roles/node_exporter/README.md
Normal file
34
roles/node_exporter/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
Role Name
|
||||
=========
|
||||
|
||||
Deploy `prometheus/node_exporter` binary as a systemd unit.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
|
||||
`node_exporter_bin_path`: where to install the binary (default: `/usr/bin`).
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
|
||||
See: [converge.yml](molecule/default/converge.yml)
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
BSD
|
||||
|
||||
Author Information
|
||||
------------------
|
||||
|
||||
corvus-migratorius@proton.me
|
||||
2
roles/node_exporter/defaults/main.yml
Normal file
2
roles/node_exporter/defaults/main.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
---
|
||||
node_exporter_bin_path: /usr/bin
|
||||
1
roles/node_exporter/handlers/main.yml
Normal file
1
roles/node_exporter/handlers/main.yml
Normal file
@@ -0,0 +1 @@
|
||||
---
|
||||
17
roles/node_exporter/meta/main.yml
Normal file
17
roles/node_exporter/meta/main.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
galaxy_info:
|
||||
role_name: node_exporter
|
||||
namespace: genlab
|
||||
author: "Alexander Gorelyshev"
|
||||
company: "Genlab, LLC"
|
||||
description: "Deploy prometheus/node_exporter binary as a systemd unit"
|
||||
license: "GPL-2.0-or-later"
|
||||
min_ansible_version: "2.1"
|
||||
|
||||
platforms:
|
||||
- name: "Ubuntu"
|
||||
versions: ["focal", "jammy"]
|
||||
|
||||
galaxy_tags: ["prometheus"]
|
||||
|
||||
dependencies: []
|
||||
6
roles/node_exporter/molecule/default/converge.yml
Normal file
6
roles/node_exporter/molecule/default/converge.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
roles:
|
||||
- role: genlab.common.node_exporter
|
||||
node_exporter_ver: "1.10.1"
|
||||
27
roles/node_exporter/molecule/default/molecule.yml
Normal file
27
roles/node_exporter/molecule/default/molecule.yml
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
dependency:
|
||||
name: galaxy
|
||||
|
||||
driver:
|
||||
name: docker
|
||||
|
||||
platforms:
|
||||
- name: ubuntu
|
||||
image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2404}-ansible:latest
|
||||
pre_build_image: true
|
||||
command: ${MOLECULE_DOCKER_COMMAND:-""}
|
||||
volumes:
|
||||
- /sys/fs/cgroup:/sys/fs/cgroup:rw
|
||||
cgroupns_mode: host
|
||||
privileged: true
|
||||
|
||||
provisioner:
|
||||
name: ansible
|
||||
|
||||
verifier:
|
||||
name: ansible
|
||||
|
||||
lint: |
|
||||
set -e
|
||||
yamllint .
|
||||
ansible-lint .
|
||||
16
roles/node_exporter/molecule/default/verify.yml
Normal file
16
roles/node_exporter/molecule/default/verify.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
# kics-scan disable=2e8d4922-8362-4606-8c14-aa10466a1ce3
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
gather_facts: false
|
||||
any_errors_fatal: true
|
||||
|
||||
tasks:
|
||||
- name: "Sanity check the node exporter"
|
||||
retries: 5
|
||||
delay: 1
|
||||
register: node_exporter_check
|
||||
failed_when: '"node_exporter_build_info" not in node_exporter_check.content'
|
||||
ansible.builtin.uri:
|
||||
url: "http://localhost:9100/metrics"
|
||||
return_content: true
|
||||
37
roles/node_exporter/tasks/install.yml
Normal file
37
roles/node_exporter/tasks/install.yml
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
- name: "Install | Check if node_exporter is accessible from $PATH"
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
register: node_exporter_cmd
|
||||
ansible.builtin.command:
|
||||
cmd: node_exporter --version
|
||||
|
||||
- name: "Install | Build the exporter name"
|
||||
when: "node_exporter_ver not in node_exporter_cmd.stdout"
|
||||
ansible.builtin.set_fact:
|
||||
node_exporter_name: "/node_exporter-{{ node_exporter_ver }}\
|
||||
.{{ ansible_system | lower }}-\
|
||||
{{ (ansible_architecture == 'x86_64') | ternary('amd64', ansible_architecture) }}"
|
||||
|
||||
- name: "Install | Download the node_exporter binary (release {{ node_exporter_ver }})"
|
||||
when: "node_exporter_ver not in node_exporter_cmd.stdout"
|
||||
ansible.builtin.unarchive:
|
||||
src: "\
|
||||
https://github.com/prometheus/node_exporter/releases/download/\
|
||||
v{{ node_exporter_ver }}\
|
||||
{{ node_exporter_name }}\
|
||||
.tar.gz"
|
||||
dest: /tmp
|
||||
remote_src: true
|
||||
|
||||
- name: "Install | Install the downloaded binary to '{{ node_exporter_bin_path }}'"
|
||||
when: "node_exporter_ver not in node_exporter_cmd.stdout"
|
||||
changed_when: false
|
||||
ansible.builtin.command:
|
||||
cmd: install /tmp/{{ node_exporter_name }}/node_exporter -t {{ node_exporter_bin_path }}
|
||||
|
||||
- name: "Install | Push the service file template"
|
||||
ansible.builtin.template:
|
||||
src: node_exporter.service.j2
|
||||
dest: /usr/lib/systemd/system/node_exporter.service
|
||||
mode: "0660"
|
||||
6
roles/node_exporter/tasks/main.yml
Normal file
6
roles/node_exporter/tasks/main.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: "Include installation tasks"
|
||||
ansible.builtin.include_tasks: "install.yml"
|
||||
|
||||
- name: "Including run tasks"
|
||||
ansible.builtin.include_tasks: "run.yml"
|
||||
8
roles/node_exporter/tasks/run.yml
Normal file
8
roles/node_exporter/tasks/run.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
- name: "Enable and start the node_exporter service"
|
||||
changed_when: false
|
||||
ansible.builtin.systemd:
|
||||
name: node_exporter
|
||||
enabled: true
|
||||
daemon_reload: true
|
||||
state: restarted
|
||||
12
roles/node_exporter/templates/node_exporter.service.j2
Normal file
12
roles/node_exporter/templates/node_exporter.service.j2
Normal file
@@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=Node Exporter
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart={{ node_exporter_bin_path }}/node_exporter \
|
||||
--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/) \
|
||||
--collector.systemd
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
1
roles/node_exporter/vars/main.yml
Normal file
1
roles/node_exporter/vars/main.yml
Normal file
@@ -0,0 +1 @@
|
||||
---
|
||||
Reference in New Issue
Block a user