haproxy-wi/app/modules/service/exporter_installation.py

38 lines
1.7 KiB
Python

import os
import app.modules.db.sql as sql
from app.modules.service.installation import run_ansible
def generate_exporter_inc(server_ip: str, ext_prom: int, ver: str, exporter: str) -> object:
inv = {"server": {"hosts": {}}}
server_ips = [server_ip]
inv['server']['hosts'][server_ip] = {
'EXP_PROM': ext_prom,
f'{exporter}_exporter_version': ver,
'service': f'{exporter} exporter'
}
if exporter in ('haproxy', 'nginx', 'apache'):
inv['server']['hosts'][server_ip]['STAT_PORT'] = sql.get_setting(f'{exporter}_stats_port')
inv['server']['hosts'][server_ip]['STATS_USER'] = sql.get_setting(f'{exporter}_stats_user')
inv['server']['hosts'][server_ip]['STATS_PASS'] = sql.get_setting(f'{exporter}_stats_password')
inv['server']['hosts'][server_ip]['STAT_PAGE'] = sql.get_setting(f'{exporter}_stats_page')
if not os.path.isdir('/var/www/haproxy-wi/app/scripts/ansible/roles/bdellegrazie.ansible-role-prometheus_exporter'):
os.system('ansible-galaxy install bdellegrazie.ansible-role-prometheus_exporter --roles-path /var/www/haproxy-wi/app/scripts/ansible/roles/')
if exporter == 'haproxy':
inv['server']['hosts'][server_ip]['STAT_FILE'] = sql.get_setting('server_state_file')
return inv, server_ips
def install_exporter(server_ip: str, ver: str, ext_prom: int, exporter: str) -> object:
service = f'{exporter.title()} exporter'
try:
inv, server_ips = generate_exporter_inc(server_ip, ext_prom, ver, exporter)
return run_ansible(inv, server_ips, f'{exporter}_exporter'), 201
except Exception as e:
raise Exception(f'error: Cannot install {service}: {e}')