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.
84 lines
2.2 KiB
YAML
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
|