ansible-playbooks

another attempt to have everything organized ...
git clone https://git.e1e0.net/ansible-playbooks.git
Log | Files | Refs | README | LICENSE

commit 29ac79f084a785287fe15ed3b794df7e83de1ae9
parent 677321eb08fd363d438c3db3499b93db872394e7
Author: Paco Esteban <paco@e1e0.net>
Date:   Fri, 20 Dec 2019 20:22:05 +0100

add node exporter role (incomplete!)

Diffstat:
Mlocalutils.yml | 1+
Aroles/node-exporter/defaults/main.yml | 16++++++++++++++++
Aroles/node-exporter/files/node_exporter.service.j2 | 34++++++++++++++++++++++++++++++++++
Aroles/node-exporter/handlers/main.yml | 7+++++++
Aroles/node-exporter/tasks/main.yml | 92+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aroles/node-exporter/vars/main.yml | 11+++++++++++
6 files changed, 161 insertions(+), 0 deletions(-)

diff --git a/localutils.yml b/localutils.yml @@ -5,3 +5,4 @@ become: yes roles: - upsc_exporter + - node-exporter diff --git a/roles/node-exporter/defaults/main.yml b/roles/node-exporter/defaults/main.yml @@ -0,0 +1,16 @@ +--- +node_exporter_version: "0.18.1" + +node_exporter_system_user: "node_exporter" +node_exporter_system_group: "{{ node_exporter_system_user }}" + +node_exporter_web_listen_address: "0.0.0.0:9100" + +node_exporter_enabled_collectors: [] +# - systemd +# - textfile: +# directory: "/var/lib/node_exporter" +# - filesystem: +# ignored-mount-points: "^/(sys|proc|dev)($|/)" +# ignored-fs-types: "^(sys|proc|auto)fs$" +node_exporter_disabled_collectors: [] diff --git a/roles/node-exporter/files/node_exporter.service.j2 b/roles/node-exporter/files/node_exporter.service.j2 @@ -0,0 +1,34 @@ +{{ ansible_managed | comment }} + +[Unit] +Description=Prometheus Node Exporter +After=network-online.target +StartLimitInterval=0 + +[Service] +Type=simple +User={{ node_exporter_system_user }} +Group={{ node_exporter_system_group }} +ExecStart=/opt/bin/node_exporter \ +{% for collector in node_exporter_enabled_collectors -%} +{% if not collector is mapping %} + --collector.{{ collector }} \ +{% else -%} +{% set name, options = (collector.items()|list)[0] -%} + --collector.{{ name }} \ +{% for k,v in options|dictsort %} + --collector.{{ name }}.{{ k }}={{ v }} \ +{% endfor -%} +{% endif -%} +{% endfor -%} +{% for collector in node_exporter_disabled_collectors %} + --no-collector.{{ collector }} \ +{% endfor %} + --web.listen-address={{ node_exporter_web_listen_address }} + +SyslogIdentifier=node_exporter +Restart=always +RestartSec=1 + +[Install] +WantedBy=multi-user.target diff --git a/roles/node-exporter/handlers/main.yml b/roles/node-exporter/handlers/main.yml @@ -0,0 +1,7 @@ +--- +- name: restart node_exporter + systemd: + daemon_reload: true + name: node_exporter + state: restarted + when: go_os == "linux" diff --git a/roles/node-exporter/tasks/main.yml b/roles/node-exporter/tasks/main.yml @@ -0,0 +1,92 @@ +--- +- name: Create the node_exporter group + group: + name: "{{ node_exporter_system_group }}" + state: present + system: true + when: node_exporter_system_group != "root" + +- name: Create the node_exporter user + user: + name: "{{ node_exporter_system_user }}" + groups: "{{ node_exporter_system_group }}" + append: true + shell: /usr/sbin/nologin + system: true + create_home: false + home: / + when: node_exporter_system_user != "root" + +- name: create opt/bin + file: + name: /opt/bin + state: directory + owner: root + group: root + mode: '0755' + +- block: + - name: Get checksum list from github + set_fact: + _checksums: "{{ lookup('url', 'https://github.com/prometheus/node_exporter/releases/download/v' + node_exporter_version + '/sha256sums.txt', wantlist=True) | list }}" + run_once: true + + - name: "Get checksum for {{ go_arch }} architecture" + set_fact: + node_exporter_checksum: "{{ item.split(' ')[0] }}" + with_items: "{{ _checksums }}" + when: + - "( go_os + '-' + go_arch + '.tar.gz') in item" + +- name: Download node_exporter tarball + get_url: + url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}.tar.gz" + dest: "/tmp/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}.tar.gz" + checksum: "sha256:{{ node_exporter_checksum }}" + mode: '0755' + owner: root + group: root + register: _download_binary + until: _download_binary is succeeded + retries: 5 + delay: 2 + +- name: Unpack node_exporter tarball + unarchive: + remote_src: yes + src: "/tmp/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}.tar.gz" + dest: "/tmp" + creates: "/tmp/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}/node_exporter" + +- name: Propagate node_exporter binaries + copy: + remote_src: yes + src: "/tmp/node_exporter-{{ node_exporter_version }}.{{ go_os }}-{{ go_arch }}/node_exporter" + dest: "/opt/bin/node_exporter" + mode: 0755 + owner: root + group: root + notify: restart node_exporter + +- name: node_exporter service + template: + src: files/node_exporter.service.j2 + dest: /etc/systemd/system/node_exporter.service + owner: root + group: root + mode: '0644' + register: node_exporter_unit_file + when: go_os == "linux" + +- name: reload systemd daemon + command: systemctl daemon-reload + when: + - node_exporter_unit_file.changed + - go_os == "linux" + +- name: enable and start (linux) + service: + name: node_exporter + enabled: yes + state: started + when: go_os == "linux" diff --git a/roles/node-exporter/vars/main.yml b/roles/node-exporter/vars/main.yml @@ -0,0 +1,11 @@ +--- +go_arch_map: + i386: '386' + x86_64: 'amd64' + aarch64: 'arm64' + armv7l: 'armv7' + armv6l: 'armv6' + +go_arch: "{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}" + +go_os: "{{ ansible_system | lower }}"