Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 1 addition & 4 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,7 @@ repos:
- id: yamllint
stages:
- manual
args:
- >-
-d {extends: default, rules: {line-length: disable},
ignore: [submodules/]}
args: ['-c', '.yamllint']
- repo: https://github.com/ansible-community/ansible-lint
rev: v24.9.2
hooks:
Expand Down
8 changes: 8 additions & 0 deletions .yamllint
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
extends: default
rules:
indentation:
spaces: 2
line-length: disable
comments:
min-spaces-from-content: 2
12 changes: 6 additions & 6 deletions ansible/inventory/genestack/group_vars/all/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ no_proxy_env: "localhost,127.0.0.1"
http_proxy_env: "{{ lookup('env', 'http_proxy') }}"
https_proxy_env: "{{ lookup('env', 'https_proxy') }}"
global_environment_variables:
HTTP_PROXY: "{{ http_proxy_env }}"
HTTPS_PROXY: "{{ https_proxy_env }}"
http_proxy: "{{ http_proxy_env }}"
https_proxy: "{{ https_proxy_env }}"
NO_PROXY: "{{ no_proxy_env }}"
no_proxy: "{{ no_proxy_env }}"
HTTP_PROXY: "{{ http_proxy_env }}"
HTTPS_PROXY: "{{ https_proxy_env }}"
http_proxy: "{{ http_proxy_env }}"
https_proxy: "{{ https_proxy_env }}"
NO_PROXY: "{{ no_proxy_env }}"
no_proxy: "{{ no_proxy_env }}"
95 changes: 49 additions & 46 deletions ansible/playbooks/custom_exporters.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,113 +15,116 @@

- hosts: all
become: true
gather_facts: "{{ gather_facts | default(true) }}"
environment: "{{ deployment_environment_variables | default({}) }}"
gather_facts: '{{ gather_facts | default(true) }}'
environment: '{{ deployment_environment_variables | default({}) }}'
vars:
exporters_parent_dir: /opt/prometheus_custom_exporters
venv_dir: "{{ exporters_parent_dir }}/venv"
venv_python: "{{ venv_dir }}/bin/python"
exporters_dir: "{{ exporters_parent_dir }}/exporters"
venv_dir: '{{ exporters_parent_dir }}/venv'
venv_python: '{{ venv_dir }}/bin/python'
exporters_dir: '{{ exporters_parent_dir }}/exporters'
prom_dir: /opt/node_exporter/textfile_collector
tasks:
- name: Install moreutils sponge
ansible.builtin.package:
name:
- moreutils
- nvme-cli
- python3-venv
name: [moreutils, nvme-cli, python3-venv]
state: present
update_cache: true

- name: Manually create the initial virtualenv if not present
command:
cmd: "sudo python3 -m venv {{ venv_dir }}"
creates: "{{ venv_dir }}"
cmd: sudo python3 -m venv {{ venv_dir }}
creates: '{{ venv_dir }}'

- name: Wait for virtualenv creation to complete
wait_for:
path: "{{ venv_dir }}/bin/pip"
path: '{{ venv_dir }}/bin/pip'
state: present

- name: Recursively check ownership and permissions on exporters_parent_dir
ansible.builtin.file:
path: "{{ exporters_parent_dir }}"
path: '{{ exporters_parent_dir }}'
state: directory
recurse: yes
recurse: true
owner: root
group: root

- ansible.builtin.copy:
src: extra/custom_exporters/
dest: "{{ exporters_dir }}"
dest: '{{ exporters_dir }}'
owner: root
group: root
mode: '0755'

- name: Install python requirements in virtualenv
ansible.builtin.pip:
requirements: "{{ exporters_dir }}/requirements.txt"
virtualenv: "{{ venv_dir }}"

requirements: '{{ exporters_dir }}/requirements.txt'
virtualenv: '{{ venv_dir }}'
# Individual exporter cron tasks...
- name: Create a job that runs every minute to check kernel taint and store for metrics collection
- name: Create a job that runs every minute to check kernel taint and store
for metrics collection
ansible.builtin.cron:
name: "Kernel taint inspector"
minute: "*/1"
name: Kernel taint inspector
minute: '*/1'
user: root
job: "{{ exporters_dir }}/kernel_taint.sh"
job: '{{ exporters_dir }}/kernel_taint.sh'
cron_file: flex-prometheus-exporters
state: present

- name: Dell custom exporter cron tasks
when:
- ansible_facts.system_vendor == 'Dell Inc.'
when: [ansible_facts.system_vendor == 'Dell Inc.']
block:
- name: Create a job that runs every 3 minutes to check mdadm status and store for metrics collection
- name: Create a job that runs every 3 minutes to check mdadm status and
store for metrics collection
ansible.builtin.cron:
name: "mdadm inspector"
minute: "*/3"
name: mdadm inspector
minute: '*/3'
user: root
job: "{{ exporters_dir }}/md_info_detail.sh | /usr/bin/sponge {{ prom_dir }}/md_info_detail.prom"
job: '{{ exporters_dir }}/md_info_detail.sh | /usr/bin/sponge {{ prom_dir }}/md_info_detail.prom'
cron_file: flex-prometheus-exporters
state: present
- name: Create a job that runs every 3 minutes to check nvme status and store for metrics collection
- name: Create a job that runs every 3 minutes to check nvme status and
store for metrics collection
ansible.builtin.cron:
name: "nvme inspector"
minute: "*/3"
name: nvme inspector
minute: '*/3'
user: root
job: "{{ venv_python }} {{ exporters_dir }}/nvme_metrics.py | /usr/bin/sponge {{ prom_dir }}/nvme_metrics.prom"
job: '{{ venv_python }} {{ exporters_dir }}/nvme_metrics.py | /usr/bin/sponge
{{ prom_dir }}/nvme_metrics.prom'
cron_file: flex-prometheus-exporters
state: present
- name: Create a job that runs every 5 minutes to check DELL RAID and store for metrics collection
- name: Create a job that runs every 5 minutes to check DELL RAID and store
for metrics collection
ansible.builtin.cron:
name: "perccli64 raid disk inspector"
minute: "*/5"
name: perccli64 raid disk inspector
minute: '*/5'
user: root
job: "{{ venv_python }} {{ exporters_dir }}/perccli.py | /usr/bin/sponge {{ prom_dir }}/perccli.prom"
job: '{{ venv_python }} {{ exporters_dir }}/perccli.py | /usr/bin/sponge
{{ prom_dir }}/perccli.prom'
cron_file: flex-prometheus-exporters
state: present

# Task block for HP nodes. Only one check being added now. Append new tasks as needed
- name: HP custom exporter cron tasks
when:
- ansible_facts.system_vendor == "HP"
when: [ansible_facts.system_vendor == "HP"]
block:
- name: Create a job that runs every 5 minutes to check HP ssacli RAID and store for metrics collection
- name: Create a job that runs every 5 minutes to check HP ssacli RAID and
store for metrics collection
ansible.builtin.cron:
name: "ssacli raid disk inspector"
minute: "*/5"
name: ssacli raid disk inspector
minute: '*/5'
user: root
job: "{{ venv_python }} {{ exporters_dir }}/ssacli_exporter.py --output {{ prom_dir }}/ssacli_exporter.prom"
job: '{{ venv_python }} {{ exporters_dir }}/ssacli_exporter.py --output
{{ prom_dir }}/ssacli_exporter.prom'
cron_file: flex-prometheus-exporters
state: present

- name: Create a job that runs every 5 minutes to check multipathd status and store for metrics collection
- name: Create a job that runs every 5 minutes to check multipathd status and
store for metrics collection
ansible.builtin.cron:
name: "multipathd inspector"
minute: "*/5"
name: multipathd inspector
minute: '*/5'
user: root
job: "{{ exporters_dir }}/multipathd_info | /usr/bin/sponge {{ prom_dir }}/multipathd_info.prom"
job: '{{ exporters_dir }}/multipathd_info | /usr/bin/sponge {{ prom_dir }}/multipathd_info.prom'
cron_file: flex-prometheus-exporters
state: present
when: inventory_hostname in groups['openstack_compute_nodes']
Loading