1

I have an issue concerning Ansible role for node exporter installation.

So, here is my playbook

- name: install node-exporter
  hosts: all
  become: yes
  roles:
  - node-exporter

00_inventory.yaml

#all:
#  children:
#    nodes:
#      hosts:
#        ***.***.***.***:

#***.***.***.*** ansible_ssh_private_key_file=path_to_the_private_key

roles/node-exporter/defaults/main.yml

node_exporter_version: "1.3.1"
node_exporter_bin: /usr/local/bin/node_exporter
node_exporter_user: node-exporter
node_exporter_group: "{{ node_exporter_user }}"
node_exporter_dir_conf: /etc/node_exporter

# defaults file for roles/node-exporter

roles/node-exporter/handlers/main.yml

- name: reload_daemon_and_restart_node_exporter
  systemd:
    name: node_exporter
    state: started
    daemon_reload: yes
    enabled: yes


# handlers file for roles/node-exporter

roles/node-exporter/tasks/main.yml

- name: check if node exporter exist
  stat:
    path: "{{ node_exporter_bin }}"
  register: __check_node_exporter_present

- name: create node exporter user
  user:
    name: "{{ node_exporter_user }}"
    append: true
    shell: /usr/sbin/nologin
    system: true
    create_home: false

- name: create node exporter config dir
  file:
    path: "{{ node_exporter_dir_conf }}"
    state: directory
    owner: "{{ node_exporter_user }}"
    group: "{{ node_exporter_group }}"

- name: if node exporter exist get version
  shell: "cat /etc/systemd/system/node_exporter.service | grep Version | sed s/'.*Version '//g"
  when: __check_node_exporter_present.stat.exists == true
  changed_when: false
  register: __get_node_exporter_version
  
- name: download and unzip node exporter if not exist
  unarchive:
    src: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz"
    dest: /tmp/
    remote_src: yes
    validate_certs: no

- name: move the binary to the final destination
  copy:
    src: "/tmp/node_exporter-{{ node_exporter_version }}.linux-amd64/node_exporter"
    dest: "{{ node_exporter_bin }}"
    owner: "{{ node_exporter_user }}"
    group: "{{ node_exporter_group }}"
    mode: 0755
    remote_src: yes
  when: __check_node_exporter_present.stat.exists == false or not __get_node_exporter_version.stdout == node_exporter_version

- name: clean
  file:
    path: /tmp/node_exporter-{{ node_exporter_version }}.linux-amd64/
    state: absent

- name: install service
  template:
    src: node_exporter.service.j2
    dest: /etc/systemd/system/node_exporter.service
    owner: root
    group: root
    mode: 0755
  notify: reload_daemon_and_restart_node_exporter

- meta: flush_handlers

- name: service always started
  systemd:
    name: node_exporter
    state: started
    enabled: yes

roles/node-exporter/templates/node.exporter.service.j2

[Unit]
Description=Node Exporter Version {{ node_exporter_version }}
After=network-online.target[Service]
User={{ node_exporter_user }}
Group={{ node_exporter_user }}
Type=simple
ExecStart={{ node_exporter_bin }}[Install]
WantedBy=multi-user.target

roles/node-exporter/vars/main.yml

node_exporter_version: "1.3.1"
node_exporter_bin: /usr/local/bin/node_exporter
node_exporter_user: node-exporter
node_exporter_group: "{{ node_exporter_user }}"
node_exporter_dir_conf: /etc/node_exporter---
# vars file for roles/node-exporter

So, there is the structure of the role. But the problem is below:


root@monitoring:/etc/ans_scripts# ansible-playbook -i 00_inventory.yaml playbook.yml

PLAY [install node-exporter] ***************************************************

TASK [Gathering Facts] *********************************************************
ok: [***.**.**.***]

TASK [node-exporter : check if node exporter exist] ****************************
ok: [***.**.**.***]

TASK [node-exporter : create node exporter user] *******************************
ok: [***.**.**.***]

TASK [node-exporter : create node exporter config dir] *************************
ok: [***.**.**.***]

TASK [node-exporter : if node exporter exist get version] **********************
ok: [***.**.**.***]

TASK [node-exporter : download and unzip node exporter if not exist] ***********
changed: [***.**.**.***]

TASK [node-exporter : move the binary to the final destination] ****************
skipping: [***.**.**.***]

TASK [node-exporter : clean] ***************************************************
changed: [***.**.**.***]

TASK [node-exporter : install service] *****************************************
ok: [***.**.**.***]

TASK [node-exporter : service always started] **********************************
fatal: [***.**.**.***]: FAILED! => {"changed": false, "msg": "Error loading unit file 'node_exporter': org.freedesktop.systemd1.BadUnitSetting \"Unit node_exporter.service has a bad unit file setting.\""}

PLAY RECAP *********************************************************************
***.**.**.***              : ok=8    changed=2    unreachable=0    failed=1    skipped=1    rescued=0    ignored=0  

Could you please advice, how to resolve it?

  • 1
    According the error message "`Error loading unit file 'node_exporter': org.freedesktop.systemd1.BadUnitSetting`" and "`Unit node_exporter.service has a bad unit file setting`" you should correct (the formatting in) your `node.exporter.service.j2` file. You may have a look into the example [Running node_exporter with Ansible](https://stackoverflow.com/questions/70650714/running-node-exporter-with-ansible/70650885#70650885). – U880D May 31 '22 at 14:33
  • 1
    Please trim your code to make it easier to find your problem. Follow these guidelines to create a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example). – Amit Jun 01 '22 at 16:05

0 Answers0