From 476457888eed4db5327705324bd37b02c21d48cb Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Fri, 12 Dec 2025 16:26:04 +0300 Subject: [PATCH 1/4] add ipmi_exporter role --- roles/ipmi_exporter/.ansible-lint | 16 +++++ roles/ipmi_exporter/.yamllint | 8 +++ roles/ipmi_exporter/README.md | 61 +++++++++++++++++++ roles/ipmi_exporter/conda.dev.yml | 11 ++++ roles/ipmi_exporter/conda.prod.yml | 9 +++ roles/ipmi_exporter/defaults/main.yml | 8 +++ roles/ipmi_exporter/handlers/main.yml | 7 +++ roles/ipmi_exporter/meta/main.yml | 17 ++++++ .../molecule/default/converge.yml | 6 ++ .../molecule/default/ipmi_local.conf | 12 ++++ .../molecule/default/molecule.yml | 27 ++++++++ .../ipmi_exporter/molecule/default/verify.yml | 37 +++++++++++ roles/ipmi_exporter/renovate.json | 6 ++ roles/ipmi_exporter/requirements.ci.txt | 6 ++ roles/ipmi_exporter/requirements.txt | 1 + roles/ipmi_exporter/requirements.yml | 3 + roles/ipmi_exporter/tasks/configure.yml | 20 ++++++ roles/ipmi_exporter/tasks/install.yml | 51 ++++++++++++++++ roles/ipmi_exporter/tasks/main.yml | 7 +++ .../templates/ipmi_exporter.service.j2 | 38 ++++++++++++ roles/ipmi_exporter/vars/main.yml | 1 + 21 files changed, 352 insertions(+) create mode 100644 roles/ipmi_exporter/.ansible-lint create mode 100644 roles/ipmi_exporter/.yamllint create mode 100644 roles/ipmi_exporter/README.md create mode 100644 roles/ipmi_exporter/conda.dev.yml create mode 100644 roles/ipmi_exporter/conda.prod.yml create mode 100644 roles/ipmi_exporter/defaults/main.yml create mode 100644 roles/ipmi_exporter/handlers/main.yml create mode 100644 roles/ipmi_exporter/meta/main.yml create mode 100644 roles/ipmi_exporter/molecule/default/converge.yml create mode 100644 roles/ipmi_exporter/molecule/default/ipmi_local.conf create mode 100644 roles/ipmi_exporter/molecule/default/molecule.yml create mode 100644 roles/ipmi_exporter/molecule/default/verify.yml create mode 100644 roles/ipmi_exporter/renovate.json create mode 100644 roles/ipmi_exporter/requirements.ci.txt create mode 100644 roles/ipmi_exporter/requirements.txt create mode 100644 roles/ipmi_exporter/requirements.yml create mode 100644 roles/ipmi_exporter/tasks/configure.yml create mode 100644 roles/ipmi_exporter/tasks/install.yml create mode 100644 roles/ipmi_exporter/tasks/main.yml create mode 100644 roles/ipmi_exporter/templates/ipmi_exporter.service.j2 create mode 100644 roles/ipmi_exporter/vars/main.yml diff --git a/roles/ipmi_exporter/.ansible-lint b/roles/ipmi_exporter/.ansible-lint new file mode 100644 index 0000000..f865478 --- /dev/null +++ b/roles/ipmi_exporter/.ansible-lint @@ -0,0 +1,16 @@ +--- +profile: production +strict: true + +# Enable checking of loop variable prefixes in roles +loop_var_prefix: "^(__|{role}_)" + +skip_list: + - var-naming[no-role-prefix] + +warn_list: + - role-name[path] + - var-naming[no-role-prefix] + +exclude_paths: + - .github/ diff --git a/roles/ipmi_exporter/.yamllint b/roles/ipmi_exporter/.yamllint new file mode 100644 index 0000000..611db54 --- /dev/null +++ b/roles/ipmi_exporter/.yamllint @@ -0,0 +1,8 @@ +--- +rules: + brackets: + forbid: false + min-spaces-inside: 0 + max-spaces-inside: 2 + min-spaces-inside-empty: -1 + max-spaces-inside-empty: 2 diff --git a/roles/ipmi_exporter/README.md b/roles/ipmi_exporter/README.md new file mode 100644 index 0000000..06d3620 --- /dev/null +++ b/roles/ipmi_exporter/README.md @@ -0,0 +1,61 @@ +genlab.ipmi_exporter +========= + +This Ansible role installs ipmi_exporter on target host. This is a Prometheus exporter for Intelligent Platform Management Interface [metrics](https://github.com/prometheus-community/ipmi_exporter/blob/master/docs/metrics.md) + +Requirements +------------ + +By default, the exporter relies on tools from the FreeIPMI suite for the actual IPMI implementation. + +Role Variables +-------------- +Configuration files must have names ```web_conf.yaml``` and ```ipmi_local.conf```. If ipmi_exp_source_dir is specified, the role searches for ```web_conf.yaml``` and ```ipmi_local.conf``` in that directory and copy to target host in ```ipmi_exp_config_dir```. If the source directory is not specified, the role skips this step. In ipmi_local.conf user can describe what modules to use for metric collection. + +ipmi_up{collector=""} is 1 if the data for this collector could successfully be retrieved from the remote host, 0 otherwise. The following collectors are available and can be enabled or disabled in the config: +- ipmi: collects IPMI sensor data. If it fails, sensor metrics (see below) will not be available +- dcmi: collects DCMI data, currently only power consumption. If it fails, power consumption metrics (see below) will not be available +- bmc: collects BMC details. If it fails, BMC info metrics (see below) will not be available +- bmc-watchdog: collects status of the watchdog. If it fails, BMC watchdog metrics (see below) will not be available +- chassis: collects the current chassis power state (on/off). If it fails, the chassis power state metric (see below) will not be available +- sel: collects system event log (SEL) details. If it fails, SEL metrics (see below) will not be available +- sel-events: collects metrics for user-defined events in system event log (SEL). If it fails, SEL entries metrics (see below) will not be available +- sm-lan-mode: collects the "LAN mode" setting in the current BMC config. If it fails, the LAN mode metric (see below) will not be available + +```yaml +ipmi_exp_version: 1.10.1 +ipmi_exp_dir: "/etc/exporters" +ipmi_exp_config_dir: "/etc/exporters/config" +ipmi_exp_args: "" # --[no-]native-ipmi Use native IPMI implementation instead of FreeIPMI (EXPERIMENTAL) + # --[no-]web.systemd-socket Use systemd socket activation listeners instead of port listeners (Linux only). +ipmi_exp_log_level: "info" # Only log messages with the given severity or above. One of: [debug, info, warn, error] +ipmi_exp_log_format: "logfmt" # Output format of log messages. One of: [logfmt, json] +ipmi_exp_web_listen_address: "localhost:9290" # Addresses on which to expose metrics and web interface. Repeatable for multiple addresses. Examples: `:9100` or `[::1]:9100` for http, vsock://:9100` for vsock +ipmi_exp_source_dir: ipmi_local.conf # Path to configuration file. See: https://github.com/prometheus-community/ipmi_exporter/blob/master/docs/configuration.md +ipmi_exp_web_source_dir: web_conf.yaml # Path to configuration file that can enable TLS or authentication. See: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md +``` + +Dependencies +------------ + +None + +Example Playbook +---------------- + +```yaml + roles: + - role: genlab.ipmi_exporter + ipmi_exp_version: "1.10.1" + ipmi_exp_source_dir: "molecule/default/" +``` + +License +------- + +BSD + +Author Information +------------------ + +corvus-migratorius@proton.me diff --git a/roles/ipmi_exporter/conda.dev.yml b/roles/ipmi_exporter/conda.dev.yml new file mode 100644 index 0000000..fb974b7 --- /dev/null +++ b/roles/ipmi_exporter/conda.dev.yml @@ -0,0 +1,11 @@ +--- +name: ansible-role-template +channels: + - conda-forge +dependencies: + - python~=3.12.0 + - pip>=24.2 + - actionlint + - pip: + - -r requirements.txt + - -r requirements.ci.txt diff --git a/roles/ipmi_exporter/conda.prod.yml b/roles/ipmi_exporter/conda.prod.yml new file mode 100644 index 0000000..d6d12d6 --- /dev/null +++ b/roles/ipmi_exporter/conda.prod.yml @@ -0,0 +1,9 @@ +--- +name: ansible-role-template +channels: + - conda-forge +dependencies: + - python~=3.12.0 + - pip>=24.2 + - pip: + - -r requirements.txt diff --git a/roles/ipmi_exporter/defaults/main.yml b/roles/ipmi_exporter/defaults/main.yml new file mode 100644 index 0000000..a019389 --- /dev/null +++ b/roles/ipmi_exporter/defaults/main.yml @@ -0,0 +1,8 @@ +--- +ipmi_exp_version: 1.10.1 +ipmi_exp_dir: "/etc/exporters" +ipmi_exp_config_dir: "/etc/exporters/config" +ipmi_exp_log_level: "info" +ipmi_exp_log_format: "logfmt" +ipmi_exp_web_listen_address: "localhost:9290" +ipmi_exp_args: "" diff --git a/roles/ipmi_exporter/handlers/main.yml b/roles/ipmi_exporter/handlers/main.yml new file mode 100644 index 0000000..57f5d52 --- /dev/null +++ b/roles/ipmi_exporter/handlers/main.yml @@ -0,0 +1,7 @@ +--- +- name: "(Re)start and enable ipmi_exporter" + ansible.builtin.systemd_service: + name: ipmi_exporter.service + state: restarted + enabled: true + daemon_reload: true diff --git a/roles/ipmi_exporter/meta/main.yml b/roles/ipmi_exporter/meta/main.yml new file mode 100644 index 0000000..416e73c --- /dev/null +++ b/roles/ipmi_exporter/meta/main.yml @@ -0,0 +1,17 @@ +--- +galaxy_info: + role_name: "ipmi_exporter" + namespace: genlab + author: "Alexander Gorelyshev" + company: "Genlab, LLC" + description: "" + license: "MIT" + min_ansible_version: "2.1" + + platforms: + - name: "Ubuntu" + versions: [ "focal", "jammy", "noble" ] + + galaxy_tags: [ ] + +dependencies: [] diff --git a/roles/ipmi_exporter/molecule/default/converge.yml b/roles/ipmi_exporter/molecule/default/converge.yml new file mode 100644 index 0000000..abf2fc6 --- /dev/null +++ b/roles/ipmi_exporter/molecule/default/converge.yml @@ -0,0 +1,6 @@ +--- +- name: Converge + hosts: all + roles: + - role: genlab.ipmi_exporter + ipmi_exp_source_dir: "molecule/default/" diff --git a/roles/ipmi_exporter/molecule/default/ipmi_local.conf b/roles/ipmi_exporter/molecule/default/ipmi_local.conf new file mode 100644 index 0000000..db488bf --- /dev/null +++ b/roles/ipmi_exporter/molecule/default/ipmi_local.conf @@ -0,0 +1,12 @@ +modules: + default: + # Available collectors are bmc, bmc-watchdog, ipmi, chassis, dcmi, sel, sel-events and sm-lan-mode + collectors: + - bmc + - bmc-watchdog + - ipmi + - dcmi + - chassis + - sel + - sel-events + - sm-lan-mode \ No newline at end of file diff --git a/roles/ipmi_exporter/molecule/default/molecule.yml b/roles/ipmi_exporter/molecule/default/molecule.yml new file mode 100644 index 0000000..d82158e --- /dev/null +++ b/roles/ipmi_exporter/molecule/default/molecule.yml @@ -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 . diff --git a/roles/ipmi_exporter/molecule/default/verify.yml b/roles/ipmi_exporter/molecule/default/verify.yml new file mode 100644 index 0000000..ffdfe90 --- /dev/null +++ b/roles/ipmi_exporter/molecule/default/verify.yml @@ -0,0 +1,37 @@ +--- +- name: Verify + hosts: all + gather_facts: false + any_errors_fatal: true + + tasks: + - name: "Include default vars" + ansible.builtin.include_vars: + dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults/" + extensions: [ 'yml' ] + + - name: "Check if ipmi_exporter is installed" + changed_when: false + ansible.builtin.command: "ipmi_exporter --version" + register: ipmi_exporter_installed_version + + - name: "Check ipmi_exporter version" + ansible.builtin.assert: + that: "ipmi_exporter_installed_version.stdout is regex('{{ ipmi_exp_version }}')" + success_msg: "ipmi_exporter version {{ ipmi_exp_version }} is installed and working" + fail_msg: "ipmi_exporter version {{ ipmi_exp_version }} is not installed or not working correctly" + + # kics-scan ignore-block + - name: Check if /metrics endpoint is reachable + ansible.builtin.uri: + url: "http://{{ ipmi_exp_web_listen_address }}/metrics" + return_content: true + status_code: 200 + timeout: 60 + register: metrics_check + + - name: "Fail if /metrics doesn't contain ipmi_exporter_build_info line" + ansible.builtin.assert: + that: "'ipmi_exporter_build_info' in metrics_check.content" + fail_msg: "ipmi_exporter /metrics endpoint doesn't contain ipmi_exporter_build_info line!" + success_msg: "ipmi_exporter /metrics endpoint contains ipmi_exporter_build_info line!" diff --git a/roles/ipmi_exporter/renovate.json b/roles/ipmi_exporter/renovate.json new file mode 100644 index 0000000..5db72dd --- /dev/null +++ b/roles/ipmi_exporter/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ] +} diff --git a/roles/ipmi_exporter/requirements.ci.txt b/roles/ipmi_exporter/requirements.ci.txt new file mode 100644 index 0000000..f99c76a --- /dev/null +++ b/roles/ipmi_exporter/requirements.ci.txt @@ -0,0 +1,6 @@ +ansible-lint +molecule==24.12.0 +molecule-plugins[docker] +docker~=7.1.0 +requests==2.31.0 # pinned to the latest version not breaking Docker SDK +yamllint diff --git a/roles/ipmi_exporter/requirements.txt b/roles/ipmi_exporter/requirements.txt new file mode 100644 index 0000000..92f8677 --- /dev/null +++ b/roles/ipmi_exporter/requirements.txt @@ -0,0 +1 @@ +ansible~=11.3.0 diff --git a/roles/ipmi_exporter/requirements.yml b/roles/ipmi_exporter/requirements.yml new file mode 100644 index 0000000..3d5f1cd --- /dev/null +++ b/roles/ipmi_exporter/requirements.yml @@ -0,0 +1,3 @@ +# requirements file +--- +collections: [] diff --git a/roles/ipmi_exporter/tasks/configure.yml b/roles/ipmi_exporter/tasks/configure.yml new file mode 100644 index 0000000..3851e6f --- /dev/null +++ b/roles/ipmi_exporter/tasks/configure.yml @@ -0,0 +1,20 @@ +--- +- name: "Upload ipmi_exporter local configure file" + notify: "(Re)start and enable ipmi_exporter" + when: ipmi_exp_source_dir is defined and ipmi_exp_source_dir | length > 0 + ansible.builtin.template: + src: "{{ ipmi_exp_source_dir }}/ipmi_local.conf" + dest: "{{ ipmi_exp_config_dir }}/ipmi_local.conf" + owner: root + group: root + mode: '0640' + +- name: "Upload ipmi_exporter web configure file" + notify: "(Re)start and enable ipmi_exporter" + when: ipmi_exp_web_source_dir is defined and ipmi_exp_web_source_dir | length > 0 + ansible.builtin.template: + src: "{{ ipmi_exp_web_source_dir }}/web_conf.yaml" + dest: "{{ ipmi_exp_config_dir }}/web_conf.yaml" + owner: root + group: root + mode: '0640' diff --git a/roles/ipmi_exporter/tasks/install.yml b/roles/ipmi_exporter/tasks/install.yml new file mode 100644 index 0000000..1466d76 --- /dev/null +++ b/roles/ipmi_exporter/tasks/install.yml @@ -0,0 +1,51 @@ +--- +- name: "Install ipmi_exporter from binary" + block: + - name: "Check ipmi_exporter version" + changed_when: false + ansible.builtin.command: + cmd: "ipmi_exporter --version" + register: ipmi_exporter_ver + + - name: "Assert version correctness" + ansible.builtin.assert: + that: "ipmi_exporter_ver.stdout is regex('{{ ipmi_exp_version }}')" + success_msg: "ipmi_exporter version {{ ipmi_exp_version }} is installed and working" + fail_msg: "ipmi_exporter version {{ ipmi_exp_version }} is not installed or not working correctly" + + rescue: + - name: "Create ipmi_exporter directories" + ansible.builtin.file: + path: "{{ item }}" + state: directory + owner: root + group: root + mode: "0755" + with_items: + - "{{ ipmi_exp_dir }}" + - "{{ ipmi_exp_config_dir }}" + + - name: "Unarchive ipmi_exporter tar file" + notify: "(Re)start and enable ipmi_exporter" + ansible.builtin.unarchive: + src: "https://github.com/prometheus-community/ipmi_exporter/releases/\ + download/v{{ ipmi_exp_version }}/ipmi_exporter-{{ ipmi_exp_version }}.linux-amd64.tar.gz" + dest: "{{ ipmi_exp_dir }}" + remote_src: true + + - name: "Move ipmi_exporter binary" + ansible.builtin.copy: + src: "{{ ipmi_exp_dir }}/ipmi_exporter-{{ ipmi_exp_version }}.linux-amd64/ipmi_exporter" + dest: "/usr/local/bin/ipmi_exporter" + mode: "0755" + owner: root + group: root + remote_src: true + +- name: Create systemd service file + ansible.builtin.template: + src: ipmi_exporter.service.j2 + dest: /etc/systemd/system/ipmi_exporter.service + owner: root + group: root + mode: '0644' diff --git a/roles/ipmi_exporter/tasks/main.yml b/roles/ipmi_exporter/tasks/main.yml new file mode 100644 index 0000000..b926b2c --- /dev/null +++ b/roles/ipmi_exporter/tasks/main.yml @@ -0,0 +1,7 @@ +--- + +- name: "Include installation tasks" + ansible.builtin.include_tasks: "install.yml" + +- name: "Including configuration tasks" + ansible.builtin.include_tasks: "configure.yml" diff --git a/roles/ipmi_exporter/templates/ipmi_exporter.service.j2 b/roles/ipmi_exporter/templates/ipmi_exporter.service.j2 new file mode 100644 index 0000000..bf61227 --- /dev/null +++ b/roles/ipmi_exporter/templates/ipmi_exporter.service.j2 @@ -0,0 +1,38 @@ +[Unit] +Description=IPMI exporter +Documentation=https://github.com/prometheus-community/ipmi_exporter +After=network.target +StartLimitIntervalSec=120 +StartLimitBurst=5 + +[Service] +Type=simple +ExecStart=/usr/local/bin/ipmi_exporter \ + --web.listen-address={{ ipmi_exp_web_listen_address }} \ + --log.level={{ ipmi_exp_log_level }} \ + --log.format={{ ipmi_exp_log_format }} \ +{% if ipmi_exp_args is defined and ipmi_exp_args | length > 0 %} + {{ ipmi_exp_args }} \ +{% endif %} +{% if ipmi_exp_source_dir is defined and ipmi_exp_source_dir | length > 0 %} + --config.file={{ ipmi_exp_config_dir }}/ipmi_local.conf \ +{% endif %} +{% if ipmi_exp_web_source_dir is defined and ipmi_exp_web_source_dir | length > 0 %} + --web.config.file={{ ipmi_exp_config_dir }}/web_conf.yaml +{% endif %} + +SyslogIdentifier=ipmi_exporter +Restart=on-failure +RestartSec=5 + +ProtectHome=yes +NoNewPrivileges=yes +ProtectSystem=strict +ProtectControlGroups=true +ProtectKernelModules=true +ProtectKernelTunables=yes +PrivateTmp=true +ProtectSystem=full + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/roles/ipmi_exporter/vars/main.yml b/roles/ipmi_exporter/vars/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/ipmi_exporter/vars/main.yml @@ -0,0 +1 @@ +--- From c4d5fe1607c038f078799608e88292717d69033b Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Fri, 12 Dec 2025 16:28:10 +0300 Subject: [PATCH 2/4] change meta --- README.md | 1 + galaxy.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c2dc02..5bd9d0d 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ - [alertmanager](roles/alertmanager/README.md) - [dnsmasq](roles/dnsmasq/README.md) - [grafana](roles/grafana/README.md) +- [ipmi_exporter](roles/ipmi_exporter/README.md) - [mount_device](roles/mount_device/README.md) - [prometheus](roles/prometheus/README.md) - [ufw](roles/ufw/README.md) diff --git a/galaxy.yml b/galaxy.yml index aa819d3..c68bddb 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -1,7 +1,7 @@ --- namespace: genlab name: common -version: 0.8.0 +version: 0.9.0 readme: README.md authors: - Alexander Gorelyshev (corvus-migratorius@proton.me) From 65925bea6f9e8874da2be9a1beed36aadf1e2932 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Fri, 12 Dec 2025 17:10:49 +0300 Subject: [PATCH 3/4] fix linter errors --- roles/ipmi_exporter/defaults/main.yml | 14 +++++++------- roles/ipmi_exporter/meta/main.yml | 4 ++-- .../molecule/default/converge.yml | 2 +- .../ipmi_exporter/molecule/default/verify.yml | 14 +++++++------- roles/ipmi_exporter/tasks/configure.yml | 4 ++-- roles/ipmi_exporter/tasks/install.yml | 16 ++++++++-------- .../templates/ipmi_exporter.service.j2 | 18 +++++++++--------- 7 files changed, 36 insertions(+), 36 deletions(-) diff --git a/roles/ipmi_exporter/defaults/main.yml b/roles/ipmi_exporter/defaults/main.yml index a019389..c67b875 100644 --- a/roles/ipmi_exporter/defaults/main.yml +++ b/roles/ipmi_exporter/defaults/main.yml @@ -1,8 +1,8 @@ --- -ipmi_exp_version: 1.10.1 -ipmi_exp_dir: "/etc/exporters" -ipmi_exp_config_dir: "/etc/exporters/config" -ipmi_exp_log_level: "info" -ipmi_exp_log_format: "logfmt" -ipmi_exp_web_listen_address: "localhost:9290" -ipmi_exp_args: "" +ipmi_exporter_version: 1.10.1 +ipmi_exporter_dir: "/etc/exporters" +ipmi_exporter_config_dir: "/etc/exporters/config" +ipmi_exporter_log_level: "info" +ipmi_exporter_log_format: "logfmt" +ipmi_exporter_web_listen_address: "localhost:9290" +ipmi_exporter_args: "" diff --git a/roles/ipmi_exporter/meta/main.yml b/roles/ipmi_exporter/meta/main.yml index 416e73c..3c37e0c 100644 --- a/roles/ipmi_exporter/meta/main.yml +++ b/roles/ipmi_exporter/meta/main.yml @@ -10,8 +10,8 @@ galaxy_info: platforms: - name: "Ubuntu" - versions: [ "focal", "jammy", "noble" ] + versions: ["focal", "jammy", "noble"] - galaxy_tags: [ ] + galaxy_tags: [] dependencies: [] diff --git a/roles/ipmi_exporter/molecule/default/converge.yml b/roles/ipmi_exporter/molecule/default/converge.yml index abf2fc6..40122c5 100644 --- a/roles/ipmi_exporter/molecule/default/converge.yml +++ b/roles/ipmi_exporter/molecule/default/converge.yml @@ -2,5 +2,5 @@ - name: Converge hosts: all roles: - - role: genlab.ipmi_exporter + - role: genlab.common.ipmi_exporter ipmi_exp_source_dir: "molecule/default/" diff --git a/roles/ipmi_exporter/molecule/default/verify.yml b/roles/ipmi_exporter/molecule/default/verify.yml index ffdfe90..95aeb62 100644 --- a/roles/ipmi_exporter/molecule/default/verify.yml +++ b/roles/ipmi_exporter/molecule/default/verify.yml @@ -8,7 +8,7 @@ - name: "Include default vars" ansible.builtin.include_vars: dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults/" - extensions: [ 'yml' ] + extensions: ['yml'] - name: "Check if ipmi_exporter is installed" changed_when: false @@ -17,21 +17,21 @@ - name: "Check ipmi_exporter version" ansible.builtin.assert: - that: "ipmi_exporter_installed_version.stdout is regex('{{ ipmi_exp_version }}')" - success_msg: "ipmi_exporter version {{ ipmi_exp_version }} is installed and working" - fail_msg: "ipmi_exporter version {{ ipmi_exp_version }} is not installed or not working correctly" + that: "ipmi_exporter_installed_version.stdout is regex('{{ ipmi_exporter_version }}')" + success_msg: "ipmi_exporter version {{ ipmi_exporter_version }} is installed and working" + fail_msg: "ipmi_exporter version {{ ipmi_exporter_version }} is not installed or not working correctly" # kics-scan ignore-block - name: Check if /metrics endpoint is reachable ansible.builtin.uri: - url: "http://{{ ipmi_exp_web_listen_address }}/metrics" + url: "http://{{ ipmi_exporter_web_listen_address }}/metrics" return_content: true status_code: 200 timeout: 60 - register: metrics_check + register: ipmi_exporter_metrics_check - name: "Fail if /metrics doesn't contain ipmi_exporter_build_info line" ansible.builtin.assert: - that: "'ipmi_exporter_build_info' in metrics_check.content" + that: "'ipmi_exporter_build_info' in ipmi_exporter_metrics_check.content" fail_msg: "ipmi_exporter /metrics endpoint doesn't contain ipmi_exporter_build_info line!" success_msg: "ipmi_exporter /metrics endpoint contains ipmi_exporter_build_info line!" diff --git a/roles/ipmi_exporter/tasks/configure.yml b/roles/ipmi_exporter/tasks/configure.yml index 3851e6f..04af8f5 100644 --- a/roles/ipmi_exporter/tasks/configure.yml +++ b/roles/ipmi_exporter/tasks/configure.yml @@ -4,7 +4,7 @@ when: ipmi_exp_source_dir is defined and ipmi_exp_source_dir | length > 0 ansible.builtin.template: src: "{{ ipmi_exp_source_dir }}/ipmi_local.conf" - dest: "{{ ipmi_exp_config_dir }}/ipmi_local.conf" + dest: "{{ ipmi_exporter_config_dir }}/ipmi_local.conf" owner: root group: root mode: '0640' @@ -14,7 +14,7 @@ when: ipmi_exp_web_source_dir is defined and ipmi_exp_web_source_dir | length > 0 ansible.builtin.template: src: "{{ ipmi_exp_web_source_dir }}/web_conf.yaml" - dest: "{{ ipmi_exp_config_dir }}/web_conf.yaml" + dest: "{{ ipmi_exporter_config_dir }}/web_conf.yaml" owner: root group: root mode: '0640' diff --git a/roles/ipmi_exporter/tasks/install.yml b/roles/ipmi_exporter/tasks/install.yml index 1466d76..4d9ec03 100644 --- a/roles/ipmi_exporter/tasks/install.yml +++ b/roles/ipmi_exporter/tasks/install.yml @@ -9,9 +9,9 @@ - name: "Assert version correctness" ansible.builtin.assert: - that: "ipmi_exporter_ver.stdout is regex('{{ ipmi_exp_version }}')" - success_msg: "ipmi_exporter version {{ ipmi_exp_version }} is installed and working" - fail_msg: "ipmi_exporter version {{ ipmi_exp_version }} is not installed or not working correctly" + that: "ipmi_exporter_ver.stdout is regex('{{ ipmi_exporter_version }}')" + success_msg: "ipmi_exporter version {{ ipmi_exporter_version }} is installed and working" + fail_msg: "ipmi_exporter version {{ ipmi_exporter_version }} is not installed or not working correctly" rescue: - name: "Create ipmi_exporter directories" @@ -22,20 +22,20 @@ group: root mode: "0755" with_items: - - "{{ ipmi_exp_dir }}" - - "{{ ipmi_exp_config_dir }}" + - "{{ ipmi_exporter_dir }}" + - "{{ ipmi_exporter_config_dir }}" - name: "Unarchive ipmi_exporter tar file" notify: "(Re)start and enable ipmi_exporter" ansible.builtin.unarchive: src: "https://github.com/prometheus-community/ipmi_exporter/releases/\ - download/v{{ ipmi_exp_version }}/ipmi_exporter-{{ ipmi_exp_version }}.linux-amd64.tar.gz" - dest: "{{ ipmi_exp_dir }}" + download/v{{ ipmi_exporter_version }}/ipmi_exporter-{{ ipmi_exporter_version }}.linux-amd64.tar.gz" + dest: "{{ ipmi_exporter_dir }}" remote_src: true - name: "Move ipmi_exporter binary" ansible.builtin.copy: - src: "{{ ipmi_exp_dir }}/ipmi_exporter-{{ ipmi_exp_version }}.linux-amd64/ipmi_exporter" + src: "{{ ipmi_exporter_dir }}/ipmi_exporter-{{ ipmi_exporter_version }}.linux-amd64/ipmi_exporter" dest: "/usr/local/bin/ipmi_exporter" mode: "0755" owner: root diff --git a/roles/ipmi_exporter/templates/ipmi_exporter.service.j2 b/roles/ipmi_exporter/templates/ipmi_exporter.service.j2 index bf61227..6b41d18 100644 --- a/roles/ipmi_exporter/templates/ipmi_exporter.service.j2 +++ b/roles/ipmi_exporter/templates/ipmi_exporter.service.j2 @@ -8,17 +8,17 @@ StartLimitBurst=5 [Service] Type=simple ExecStart=/usr/local/bin/ipmi_exporter \ - --web.listen-address={{ ipmi_exp_web_listen_address }} \ - --log.level={{ ipmi_exp_log_level }} \ - --log.format={{ ipmi_exp_log_format }} \ -{% if ipmi_exp_args is defined and ipmi_exp_args | length > 0 %} - {{ ipmi_exp_args }} \ + --web.listen-address={{ ipmi_exporter_web_listen_address }} \ + --log.level={{ ipmi_exporter_log_level }} \ + --log.format={{ ipmi_exporter_log_format }} \ +{% if ipmi_exporter_args is defined and ipmi_exporter_args | length > 0 %} + {{ ipmi_exporter_args }} \ {% endif %} -{% if ipmi_exp_source_dir is defined and ipmi_exp_source_dir | length > 0 %} - --config.file={{ ipmi_exp_config_dir }}/ipmi_local.conf \ +{% if ipmi_exporter_source_dir is defined and ipmi_exporter_source_dir | length > 0 %} + --config.file={{ ipmi_exporter_config_dir }}/ipmi_local.conf \ {% endif %} -{% if ipmi_exp_web_source_dir is defined and ipmi_exp_web_source_dir | length > 0 %} - --web.config.file={{ ipmi_exp_config_dir }}/web_conf.yaml +{% if ipmi_exporter_web_source_dir is defined and ipmi_exporter_web_source_dir | length > 0 %} + --web.config.file={{ ipmi_exporter_config_dir }}/web_conf.yaml {% endif %} SyslogIdentifier=ipmi_exporter From dad3bfa9434d840c53ee40b16c01fcc587f2a16f Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Fri, 12 Dec 2025 17:11:58 +0300 Subject: [PATCH 4/4] remove garbage --- roles/ipmi_exporter/.ansible-lint | 16 ---------------- roles/ipmi_exporter/.yamllint | 8 -------- roles/ipmi_exporter/conda.dev.yml | 11 ----------- roles/ipmi_exporter/conda.prod.yml | 9 --------- roles/ipmi_exporter/renovate.json | 6 ------ roles/ipmi_exporter/requirements.ci.txt | 6 ------ roles/ipmi_exporter/requirements.txt | 1 - roles/ipmi_exporter/requirements.yml | 3 --- 8 files changed, 60 deletions(-) delete mode 100644 roles/ipmi_exporter/.ansible-lint delete mode 100644 roles/ipmi_exporter/.yamllint delete mode 100644 roles/ipmi_exporter/conda.dev.yml delete mode 100644 roles/ipmi_exporter/conda.prod.yml delete mode 100644 roles/ipmi_exporter/renovate.json delete mode 100644 roles/ipmi_exporter/requirements.ci.txt delete mode 100644 roles/ipmi_exporter/requirements.txt delete mode 100644 roles/ipmi_exporter/requirements.yml diff --git a/roles/ipmi_exporter/.ansible-lint b/roles/ipmi_exporter/.ansible-lint deleted file mode 100644 index f865478..0000000 --- a/roles/ipmi_exporter/.ansible-lint +++ /dev/null @@ -1,16 +0,0 @@ ---- -profile: production -strict: true - -# Enable checking of loop variable prefixes in roles -loop_var_prefix: "^(__|{role}_)" - -skip_list: - - var-naming[no-role-prefix] - -warn_list: - - role-name[path] - - var-naming[no-role-prefix] - -exclude_paths: - - .github/ diff --git a/roles/ipmi_exporter/.yamllint b/roles/ipmi_exporter/.yamllint deleted file mode 100644 index 611db54..0000000 --- a/roles/ipmi_exporter/.yamllint +++ /dev/null @@ -1,8 +0,0 @@ ---- -rules: - brackets: - forbid: false - min-spaces-inside: 0 - max-spaces-inside: 2 - min-spaces-inside-empty: -1 - max-spaces-inside-empty: 2 diff --git a/roles/ipmi_exporter/conda.dev.yml b/roles/ipmi_exporter/conda.dev.yml deleted file mode 100644 index fb974b7..0000000 --- a/roles/ipmi_exporter/conda.dev.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: ansible-role-template -channels: - - conda-forge -dependencies: - - python~=3.12.0 - - pip>=24.2 - - actionlint - - pip: - - -r requirements.txt - - -r requirements.ci.txt diff --git a/roles/ipmi_exporter/conda.prod.yml b/roles/ipmi_exporter/conda.prod.yml deleted file mode 100644 index d6d12d6..0000000 --- a/roles/ipmi_exporter/conda.prod.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: ansible-role-template -channels: - - conda-forge -dependencies: - - python~=3.12.0 - - pip>=24.2 - - pip: - - -r requirements.txt diff --git a/roles/ipmi_exporter/renovate.json b/roles/ipmi_exporter/renovate.json deleted file mode 100644 index 5db72dd..0000000 --- a/roles/ipmi_exporter/renovate.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:recommended" - ] -} diff --git a/roles/ipmi_exporter/requirements.ci.txt b/roles/ipmi_exporter/requirements.ci.txt deleted file mode 100644 index f99c76a..0000000 --- a/roles/ipmi_exporter/requirements.ci.txt +++ /dev/null @@ -1,6 +0,0 @@ -ansible-lint -molecule==24.12.0 -molecule-plugins[docker] -docker~=7.1.0 -requests==2.31.0 # pinned to the latest version not breaking Docker SDK -yamllint diff --git a/roles/ipmi_exporter/requirements.txt b/roles/ipmi_exporter/requirements.txt deleted file mode 100644 index 92f8677..0000000 --- a/roles/ipmi_exporter/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -ansible~=11.3.0 diff --git a/roles/ipmi_exporter/requirements.yml b/roles/ipmi_exporter/requirements.yml deleted file mode 100644 index 3d5f1cd..0000000 --- a/roles/ipmi_exporter/requirements.yml +++ /dev/null @@ -1,3 +0,0 @@ -# requirements file ---- -collections: []