85 lines
2.3 KiB
YAML
85 lines
2.3 KiB
YAML
---
|
|
- name: Deploy portal updates and status monitor
|
|
hosts: web
|
|
become: true
|
|
|
|
tasks:
|
|
- name: Deploy portal website files
|
|
ansible.builtin.copy:
|
|
src: ../website/
|
|
dest: /usr/share/nginx/html
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
directory_mode: "0755"
|
|
notify: Restore SELinux contexts
|
|
|
|
- name: Create VM status check python script
|
|
ansible.builtin.copy:
|
|
content: |
|
|
#!/usr/bin/env python3
|
|
import subprocess
|
|
import json
|
|
import os
|
|
|
|
hosts = {
|
|
"ipa": "172.30.1.100",
|
|
"control": "172.30.1.200",
|
|
"web": "172.30.1.201",
|
|
"media": '172.30.1.202'
|
|
}
|
|
|
|
status = {}
|
|
|
|
for name, ip in hosts.items():
|
|
res = subprocess.run(["ping", "-c", "1", "-W", "1", ip], stdout=subprocess.DEVNULL)
|
|
status[name] = (res.returncode == 0)
|
|
|
|
# Calculate total active VMs based on ping success
|
|
status["active_vms"] = sum(1 for online in status.values() if online)
|
|
|
|
output_path = "/usr/share/nginx/html/status.json"
|
|
with open(output_path, "w") as f:
|
|
json.dump(status, f)
|
|
dest: /usr/share/nginx/html/ping_status.py
|
|
owner: root
|
|
group: root
|
|
mode: "0755"
|
|
|
|
- name: Deploy homelab monitor systemd service
|
|
ansible.builtin.copy:
|
|
content: |
|
|
[Unit]
|
|
Description=Homelab nodes status monitor
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=/bin/bash -c "while true; do /usr/bin/python3 /usr/share/nginx/html/ping_status.py; sleep 10; done"
|
|
Restart=always
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
dest: /etc/systemd/system/homelab-monitor.service
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
notify: Reload systemd
|
|
|
|
- name: Start and enable homelab-monitor service
|
|
ansible.builtin.systemd:
|
|
name: homelab-monitor
|
|
state: started
|
|
enabled: true
|
|
|
|
handlers:
|
|
- name: Restore SELinux contexts
|
|
ansible.builtin.command:
|
|
cmd: restorecon -Rv /usr/share/nginx/html
|
|
changed_when: false
|
|
|
|
- name: Reload systemd
|
|
ansible.builtin.systemd:
|
|
daemon_reload: true
|
|
changed_when: false
|