2026-06-01 14:59:30 +02:00
|
|
|
---
|
|
|
|
|
# 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:
|
2026-06-07 20:35:59 +02:00
|
|
|
- "nssm.exe"
|
2026-06-01 14:59:30 +02:00
|
|
|
- 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:
|
2026-06-07 20:35:59 +02:00
|
|
|
- "nssm.exe"
|
2026-06-01 14:59:30 +02:00
|
|
|
- set
|
|
|
|
|
- llama-exporter
|
|
|
|
|
- AppDirectory
|
|
|
|
|
- "{{ __exporter_install_dir }}"
|
|
|
|
|
|
|
|
|
|
- name: Configure exporter stdout log via NSSM
|
|
|
|
|
ansible.windows.win_command:
|
|
|
|
|
argv:
|
2026-06-07 20:35:59 +02:00
|
|
|
- "nssm.exe"
|
2026-06-01 14:59:30 +02:00
|
|
|
- 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:
|
2026-06-07 20:35:59 +02:00
|
|
|
- "nssm.exe"
|
2026-06-01 14:59:30 +02:00
|
|
|
- set
|
|
|
|
|
- llama-exporter
|
|
|
|
|
- AppStderr
|
|
|
|
|
- "{{ llama_server_windows_install_dir }}\\exporter-service.err.log"
|
|
|
|
|
|
|
|
|
|
- name: Set exporter environment variables
|
|
|
|
|
ansible.windows.win_command:
|
|
|
|
|
argv:
|
2026-06-07 20:35:59 +02:00
|
|
|
- "nssm.exe"
|
2026-06-01 14:59:30 +02:00
|
|
|
- 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:
|
2026-06-07 20:35:59 +02:00
|
|
|
- "nssm.exe"
|
2026-06-01 14:59:30 +02:00
|
|
|
- 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
|