- name: Install Node Exporter from binary hosts: all become: true vars: node_exporter_version: "1.9.1" node_exporter_user: "node_exporter" node_exporter_listen: "0.0.0.0:9100" node_exporter_bin_dir: "/usr/local/bin" node_exporter_service_path: "/etc/systemd/system/node_exporter.service" node_exporter_arch_map: x86_64: "amd64" aarch64: "arm64" armv7l: "armv7" node_exporter_arch: "{{ node_exporter_arch_map[ansible_architecture] | default('amd64') }}" tasks: - name: Debug detected architecture debug: msg: "Detected architecture: {{ ansible_architecture }} -> using {{ node_exporter_arch }} build" - name: Ensure node_exporter user exists user: name: "{{ node_exporter_user }}" shell: /usr/sbin/nologin system: true create_home: false - name: Download Node Exporter archive get_url: url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-{{ node_exporter_arch }}.tar.gz" dest: "/tmp/node_exporter.tar.gz" mode: "0644" - name: Extract Node Exporter binary unarchive: src: "/tmp/node_exporter.tar.gz" dest: "/tmp/" remote_src: true - name: Move Node Exporter binary into place command: mv /tmp/node_exporter-{{ node_exporter_version }}.linux-{{ node_exporter_arch }}/node_exporter {{ node_exporter_bin_dir }}/node_exporter - name: Set binary permissions file: path: "{{ node_exporter_bin_dir }}/node_exporter" mode: "0755" owner: root group: root - name: Create systemd service copy: dest: "{{ node_exporter_service_path }}" content: | [Unit] Description=Prometheus Node Exporter After=network.target [Service] User={{ node_exporter_user }} ExecStart={{ node_exporter_bin_dir }}/node_exporter --web.listen-address={{ node_exporter_listen }} Restart=always [Install] WantedBy=multi-user.target notify: Restart node_exporter - name: Enable and start node_exporter systemd: name: node_exporter enabled: true state: started daemon_reload: true handlers: - name: Restart node_exporter systemd: name: node_exporter state: restarted