Files
vps/ansible/roles/healthcheck/tasks/main.yml
T
windyboy d0d5e5a704 refactor(healthcheck): support multiple profiles per host with aggregate result
Replace the single healthcheck_profile with a healthcheck_profiles list so a
host can run several checks (e.g. hk2: pdns, rustdesk, hk2aux). Profiles emit
per-check JSON to latest-<check>.json; the dispatcher clears stale per-check
files, runs every profile, and merges them into latest.json.

Contract: a single complete check keeps the historical verbatim latest.json
shape; several checks produce a worst-status aggregate retaining every check's
detail. A profile that crashes before reporting is aggregated as unknown so
latest.json can never go stale while the dispatcher fails. The dispatcher exits
with the worst (max) profile exit code.
2026-08-12 21:16:30 +08:00

84 lines
2.2 KiB
YAML

---
- name: Validate known health-check profiles
ansible.builtin.assert:
that:
- item in healthcheck_profile_scripts
fail_msg: "Unsupported healthcheck_profile: {{ item }}"
loop: "{{ healthcheck_profiles }}"
- name: Install health-check directories
ansible.builtin.file:
path: "{{ item.path }}"
state: directory
owner: root
group: root
mode: "{{ item.mode }}"
loop:
- path: "{{ healthcheck_install_root }}"
mode: "0755"
- path: "{{ healthcheck_state_dir }}"
mode: "0750"
- path: "{{ healthcheck_log_dir }}"
mode: "0750"
- name: Install common health-check library
ansible.builtin.template:
src: health-common.sh.j2
dest: "{{ healthcheck_install_root }}/health-common.sh"
owner: root
group: root
mode: "0755"
- name: Install service health-check scripts
ansible.builtin.template:
src: "{{ healthcheck_profile_scripts[item] }}.j2"
dest: "{{ healthcheck_install_root }}/{{ healthcheck_profile_scripts[item] }}"
owner: root
group: root
mode: "0755"
loop: "{{ healthcheck_profiles }}"
- name: Install health-check dispatcher
ansible.builtin.template:
src: healthcheck-runner.sh.j2
dest: "{{ healthcheck_install_root }}/run"
owner: root
group: root
mode: "0755"
- name: Install health-check systemd unit
ansible.builtin.template:
src: vps-healthcheck.service.j2
dest: "/etc/systemd/system/{{ healthcheck_service_name }}.service"
owner: root
group: root
mode: "0644"
notify: Reload systemd
- name: Install persistent health-check timer
ansible.builtin.template:
src: vps-healthcheck.timer.j2
dest: "/etc/systemd/system/{{ healthcheck_service_name }}.timer"
owner: root
group: root
mode: "0644"
notify: Reload systemd
- name: Install health-check log rotation
ansible.builtin.template:
src: logrotate-vps-healthcheck.j2
dest: /etc/logrotate.d/vps-healthcheck
owner: root
group: root
mode: "0644"
- name: Enable health-check timer
ansible.builtin.systemd_service:
name: "{{ healthcheck_service_name }}.timer"
enabled: true
state: started
daemon_reload: true
- name: Flush health-check systemd changes
ansible.builtin.meta: flush_handlers