Refactor llama_server role for Windows support and EL-specific setup
- Added Windows-specific tasks for llama_server role, including installation of dependencies, setup of services using NSSM, and configuration of firewall rules. - Introduced a new task file for Windows Exporter setup. - Consolidated EL-specific setup tasks into a separate include file. - Updated inventory to include additional host for llama server. - Adjusted error handling in Prometheus service removal task to prevent failures.
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
---
|
||||
# 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
|
||||
Reference in New Issue
Block a user