2023-10-08 12:28:14 -05:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
# File: generate-pihole-dns-dhcp.py
|
|
|
|
#
|
|
|
|
# Description: This file generates the DNS and DHCP files for pihole.
|
|
|
|
#
|
2025-04-12 02:58:38 -05:00
|
|
|
# Package: AniNIX/Kapisi
|
2023-10-08 12:28:14 -05:00
|
|
|
# Copyright: WTFPL
|
|
|
|
#
|
|
|
|
# Author: DarkFeather <darkfeather@aninix.net>
|
|
|
|
|
|
|
|
import os
|
|
|
|
import subprocess
|
|
|
|
import sys
|
2024-04-01 00:44:23 -05:00
|
|
|
import re
|
2023-10-08 12:28:14 -05:00
|
|
|
import yaml
|
2025-04-12 02:58:38 -05:00
|
|
|
from kapisi_lib import *
|
2023-10-08 12:28:14 -05:00
|
|
|
|
|
|
|
rolepath='../roles/Sharingan/files'
|
|
|
|
monfilepath=rolepath+"/monit/checks/availability"
|
|
|
|
|
2025-04-12 02:58:38 -05:00
|
|
|
def WriteMonitoringEntry(entryset):
|
2023-10-08 12:28:14 -05:00
|
|
|
### Create the ping-based monitoring entry
|
2025-04-12 02:58:38 -05:00
|
|
|
# param entryset: Entries matched from the inventory
|
2023-10-08 12:28:14 -05:00
|
|
|
global monfile
|
|
|
|
|
|
|
|
with open(monfilepath,'a') as monfile:
|
|
|
|
|
|
|
|
# Write host entries
|
2025-04-12 02:58:38 -05:00
|
|
|
for host in entryset:
|
2023-10-08 12:28:14 -05:00
|
|
|
try:
|
2025-04-12 02:58:38 -05:00
|
|
|
monfile.write('check program ' + host + '_ping_mon with path "/usr/lib/monitoring-plugins/check_ping -H ' + entryset[host][2] + ' -w 100,50% -c 1000,100% -p 3 -t 60 -4"\n')
|
|
|
|
monfile.write(' if status != 0 for 3 times within 5 cycles then exec "/etc/monit.d/scripts/critical ' + entryset[host][2] + ' is not online."\n\n')
|
2023-10-08 12:28:14 -05:00
|
|
|
except:
|
|
|
|
print(host + ' is not complete for monitoring.')
|
|
|
|
|
2025-04-12 02:58:38 -05:00
|
|
|
def WriteSSHMonitoringEntry(entryset):
|
2023-10-08 12:28:14 -05:00
|
|
|
### Create the ping-based monitoring entry
|
2025-04-12 02:58:38 -05:00
|
|
|
# param entryset: Entries matched from the inventory
|
2023-10-08 12:28:14 -05:00
|
|
|
global monfile
|
|
|
|
|
|
|
|
with open(monfilepath,'a') as monfile:
|
|
|
|
|
|
|
|
# Write host entries
|
2025-04-12 02:58:38 -05:00
|
|
|
for host in entryset:
|
2023-10-08 12:28:14 -05:00
|
|
|
try:
|
2025-04-12 02:58:38 -05:00
|
|
|
monfile.write('check program ' + host + '_ssh_mon with path "/usr/lib/monitoring-plugins/check_ssh -H ' + entryset[host][2] + '"\n')
|
|
|
|
monfile.write(' if status != 0 for 3 times within 5 cycles then exec "/etc/monit.d/scripts/critical ' + host + ' is not responding to SSH."\n\n')
|
2023-10-08 12:28:14 -05:00
|
|
|
except:
|
|
|
|
print(host + ' is not complete for monitoring.')
|
|
|
|
|
|
|
|
def GenerateFiles(file):
|
|
|
|
### Open the file and parse it
|
|
|
|
# param file: the file to work on
|
|
|
|
global monfilepath
|
|
|
|
|
|
|
|
if not os.path.isdir(rolepath):
|
|
|
|
os.mkdir(rolepath)
|
|
|
|
|
|
|
|
# Parse the yaml
|
2025-04-12 02:58:38 -05:00
|
|
|
entryset = TrackIPEntries(file,searchstring='all.children.managed.**.ip')
|
2023-10-08 12:28:14 -05:00
|
|
|
|
|
|
|
if os.path.isfile(monfilepath): os.remove(monfilepath)
|
|
|
|
|
2025-04-12 02:58:38 -05:00
|
|
|
WriteSSHMonitoringEntry(entryset)
|
|
|
|
WriteMonitoringEntry(entryset)
|
2023-10-08 12:28:14 -05:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
if len(sys.argv) != 2:
|
|
|
|
print("You need to supply an inventory file.")
|
|
|
|
sys.exit(1)
|
|
|
|
GenerateFiles(sys.argv[1])
|
|
|
|
sys.exit(0)
|