--- # 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