From 302a3e76ca1d4d303fd6938cfb26505e4ce3e73d Mon Sep 17 00:00:00 2001 From: Benjamin Brahmer Date: Tue, 26 Mar 2024 13:19:51 +0100 Subject: [PATCH] check installed node_exporter version instead of always downloading --- roles/batman/tasks/main.yml | 1 + .../files/get_node_exporter_version.py | 20 ++++++ roles/prometheus/tasks/download.yml | 64 +++++++++++++++++ roles/prometheus/tasks/main.yml | 72 +++---------------- 4 files changed, 96 insertions(+), 61 deletions(-) create mode 100644 roles/prometheus/files/get_node_exporter_version.py create mode 100644 roles/prometheus/tasks/download.yml diff --git a/roles/batman/tasks/main.yml b/roles/batman/tasks/main.yml index 6311aed..db1a7de 100644 --- a/roles/batman/tasks/main.yml +++ b/roles/batman/tasks/main.yml @@ -1,6 +1,7 @@ - name: Install basic packages ansible.builtin.apt: name: dkms + - name: Check for currently installed batman-adv ansible.builtin.script: files/get_batman_version.py args: diff --git a/roles/prometheus/files/get_node_exporter_version.py b/roles/prometheus/files/get_node_exporter_version.py new file mode 100644 index 0000000..ab8d036 --- /dev/null +++ b/roles/prometheus/files/get_node_exporter_version.py @@ -0,0 +1,20 @@ +#! python3 + +import subprocess +import sys +import re + +# compile regex for installed node_exporter version +pattern = re.compile(r"node_exporter, version (\d\.\d\.\d)") + +# check current node_exporter +node_exporter = subprocess.check_output(["/opt/node_exporter/node_exporter", "--version"]).decode("utf-8") + +# use regex to find installed version +result = pattern.match(node_exporter) + +if result: + # print only the version, without newline otherwise ansible will store the newline + print(result[1], end="") +else: + print("not_installed", end="") \ No newline at end of file diff --git a/roles/prometheus/tasks/download.yml b/roles/prometheus/tasks/download.yml new file mode 100644 index 0000000..8b707f9 --- /dev/null +++ b/roles/prometheus/tasks/download.yml @@ -0,0 +1,64 @@ +- name: Detected Architecture + ansible.builtin.debug: + var: go_arch + +- name: Download node_exporter + ansible.builtin.get_url: + url: > + https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz + dest: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz + mode: '0644' + owner: root + group: root + +- name: Unpack node_exporter + ansible.builtin.unarchive: + src: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz + dest: /opt + remote_src: true + mode: '0644' + owner: root + group: root + when: not ansible_check_mode + +- name: Delete node_exporter archive + ansible.builtin.file: + path: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz + state: absent + +- name: Stop node_exporter service + ansible.builtin.systemd: + daemon-reload: true + enabled: true + name: node_exporter + state: stopped + +- name: Move node exporter to target directory + ansible.builtin.copy: + remote_src: true + src: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}/ + dest: /opt/node_exporter/ + force: true + mode: '0744' + owner: prometheus + group: prometheus + +- name: Delete node_exporter directory + ansible.builtin.file: + path: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}/ + state: absent + +- name: Adjust node_exporter permissions + ansible.builtin.file: + path: /opt/node_exporter/node_exporter + owner: prometheus + group: prometheus + mode: '0744' + state: file + +- name: Start node_exporter service + ansible.builtin.systemd: + daemon-reload: true + enabled: true + name: node_exporter + state: restarted diff --git a/roles/prometheus/tasks/main.yml b/roles/prometheus/tasks/main.yml index f0308e9..654ddd4 100644 --- a/roles/prometheus/tasks/main.yml +++ b/roles/prometheus/tasks/main.yml @@ -12,67 +12,17 @@ system: true create_home: false -- name: Detected Architecture - ansible.builtin.debug: - var: go_arch - -- name: Download node_exporter - ansible.builtin.get_url: - url: > - https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz - dest: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz - mode: '0644' - owner: root - group: root - -- name: Unpack node_exporter - ansible.builtin.unarchive: - src: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz - dest: /opt - remote_src: true - mode: '0644' - owner: root - group: root - when: not ansible_check_mode - -- name: Delete node_exporter archive - ansible.builtin.file: - path: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}.tar.gz - state: absent - -- name: Stop node_exporter service - ansible.builtin.systemd: - daemon-reload: true - enabled: true - name: node_exporter - state: stopped +- name: Check for currently installed node_exporter + ansible.builtin.script: files/get_node_exporter_version.py + args: + executable: python3 + register: installed_node_exporter_version -- name: Move node exporter to target directory - ansible.builtin.copy: - remote_src: true - src: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}/ - dest: /opt/node_exporter/ - force: true - mode: '0744' - owner: prometheus - group: prometheus - -- name: Delete node_exporter directory - ansible.builtin.file: - path: /opt/node_exporter-{{ node_exporter_version }}.linux-{{ go_arch }}/ - state: absent +- name: Print node_exporter version and target + ansible.builtin.debug: + msg: "Currently installed node_exporter: {{ installed_node_exporter_version.stdout }} ,target is: {{ node_exporter_version }}" -- name: Adjust node_exporter permissions - ansible.builtin.file: - path: /opt/node_exporter/node_exporter - owner: prometheus - group: prometheus - mode: '0744' - state: file +- name: Check if node_exporter-adv needs to be installed or upgraded + ansible.builtin.include_tasks: download.yml + when: installed_node_exporter_version.stdout != node_exporter_version -- name: Start node_exporter service - ansible.builtin.systemd: - daemon-reload: true - enabled: true - name: node_exporter - state: restarted