Files
a13labs.infra/ansible/roles/llama_server/tasks/windows/llama_exporter.yml
T

164 lines
5.0 KiB
YAML
Raw Normal View History

---
# Windows Exporter tasks for llama_server role
- name: Define Windows Exporter paths
ansible.builtin.set_fact:
__exporter_install_dir: "{{ llama_server_windows_install_dir }}\\exporter"
__exporter_script: "{{ llama_server_windows_install_dir }}\\exporter\\llama_exporter.py"
__exporter_venv_path: "{{ llama_server_windows_install_dir }}\\exporter\\.venv"
__exporter_venv_python: "{{ llama_server_windows_install_dir }}\\exporter\\.venv\\Scripts\\python.exe"
__exporter_env: "LLAMA_EXPORTER_PORT={{ llama_server_windows_exporter_port | default(9550) }}"
__exporter_interval: "{{ llama_server_windows_exporter_interval | default(15) }}"
__exporter_timeout: "{{ llama_server_windows_exporter_timeout | default(5) }}"
- name: Create exporter directories
ansible.windows.win_file:
path: "{{ item }}"
state: directory
loop:
- "{{ llama_server_windows_install_dir }}\\exporter"
- name: Copy Windows Exporter script
ansible.windows.win_copy:
src: scripts/llama_exporter.py
dest: "{{ __exporter_script }}"
- name: Install Python packages for Windows Exporter
ansible.windows.win_stat:
path: "{{ __exporter_venv_python }}"
register: __exporter_venv_python_check
- name: Create exporter virtualenv
ansible.windows.win_command:
argv:
- "{{ llama_server_windows_python_path }}"
- -m
- venv
- "{{ __exporter_venv_path }}"
changed_when: false
when: not __exporter_venv_python_check.stat.exists
- name: Install Python packages for Windows Exporter
ansible.windows.win_command:
argv:
- "{{ __exporter_venv_python }}"
- -m
- pip
- install
- --upgrade
- pip
- setuptools
changed_when: false
- name: Remove existing exporter service if present
ansible.windows.win_service:
name: llama-exporter
state: absent
register: __exporter_remove_service
failed_when: false
- name: Set exporter targets environment variable if provided
ansible.builtin.set_fact:
__exporter_targets_env: "LLAMA_TARGETS={{ llama_server_windows_exporter_targets | to_json }}"
when: llama_server_windows_exporter_targets | default([]) | length > 0
- name: Install Windows Exporter service via NSSM
ansible.windows.win_command:
argv:
- "nssm.exe"
- install
- llama-exporter
- "{{ __exporter_venv_python }}"
- "{{ __exporter_script }}"
args:
chdir: "{{ __exporter_install_dir }}"
register: __exporter_nssm_install
changed_when: __exporter_nssm_install.rc == 0
- name: Set exporter AppDirectory via NSSM
ansible.windows.win_command:
argv:
- "nssm.exe"
- set
- llama-exporter
- AppDirectory
- "{{ __exporter_install_dir }}"
- name: Configure exporter stdout log via NSSM
ansible.windows.win_command:
argv:
- "nssm.exe"
- set
- llama-exporter
- AppStdout
- "{{ llama_server_windows_install_dir }}\\exporter-service.out.log"
- name: Configure exporter stderr log via NSSM
ansible.windows.win_command:
argv:
- "nssm.exe"
- set
- llama-exporter
- AppStderr
- "{{ llama_server_windows_install_dir }}\\exporter-service.err.log"
- name: Set exporter environment variables
ansible.windows.win_command:
argv:
- "nssm.exe"
- set
- llama-exporter
- AppEnvironmentExtra
- "{{ (__exporter_env ~ (('\n' ~ __exporter_targets_env) if (__exporter_targets_env is defined) else '')) }}"
when:
- __exporter_env | default('') != ''
- name: Set exporter Start mode to AUTO via NSSM
ansible.windows.win_command:
argv:
- "nssm.exe"
- set
- llama-exporter
- Start
- SERVICE_AUTO_START
- name: Ensure Windows Exporter service is running
ansible.windows.win_service:
name: llama-exporter
start_mode: auto
state: restarted
when: not ansible_check_mode | default(false)
- name: Wait for exporter to listen on port
ansible.windows.win_wait_for:
port: "{{ llama_server_windows_exporter_port | default(9550) }}"
delay: 5
timeout: 30
when: not ansible_check_mode | default(false)
- name: Set firewall remote IPs when string provided
ansible.builtin.set_fact:
llama_server_windows_remoteip: "{{ llama_server_windows_sources }}"
when:
- llama_server_windows_sources is defined
- llama_server_windows_sources is string
- name: Set firewall remote IPs when list provided
ansible.builtin.set_fact:
llama_server_windows_remoteip: "{{ llama_server_windows_sources | join(',') }}"
when:
- llama_server_windows_sources is defined
- not (llama_server_windows_sources is string)
- name: Allow exporter port through Windows Firewall
community.windows.win_firewall_rule:
name: Llama Exporter "{{ llama_server_windows_exporter_port | default(9550) }}"
localport: "{{ llama_server_windows_exporter_port | default(9550) }}"
protocol: tcp
direction: in
action: allow
enabled: true
# Provide one or more IPs/CIDRs in llama_server_windows_sources (e.g. ['203.0.113.10'])
remoteip: "{{ llama_server_windows_remoteip | default(omit) }}"
state: present