#!/usr/bin/env python3 # File: generate-pihole-dns-dhcp.py # # Description: This file generates the DNS and DHCP files for pihole. # # Package: AniNIX/Ubiqtorate # Copyright: WTFPL # # Author: DarkFeather import os import subprocess import sys import yaml rolepath='../roles/Sharingan/files' monfilepath=rolepath+"/monit/checks/availability" def WriteMonitoringEntry(content,hosttype,hostclass): ### Create the ping-based monitoring entry # param content: the yaml content to parse # param hosttype: managed or unmanaged # param hostclass: the type of host as classified in the yaml global monfile with open(monfilepath,'a') as monfile: # Write host entries for host in content['all']['children'][hosttype]['children'][hostclass]['hosts']: try: hostname= host + '.' + content['all']['vars']['replica_domain'] monfile.write('check program ' + host + '_ping_mon with path "/usr/lib/monitoring-plugins/check_ping -H ' + hostname + ' -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 ' + hostname + ' is not online."\n\n') except: print(host + ' is not complete for monitoring.') def WriteSSHMonitoringEntry(content,hosttype,hostclass): ### Create the ping-based monitoring entry # param content: the yaml content to parse # param hosttype: managed or unmanaged # param hostclass: the type of host as classified in the yaml global monfile with open(monfilepath,'a') as monfile: # Write host entries for host in content['all']['children'][hosttype]['children'][hostclass]['hosts']: try: hostname= host + '.' + content['all']['vars']['replica_domain'] monfile.write('check program ' + host + '_ssh_mon with path "/usr/lib/monitoring-plugins/check_ssh -H ' + hostname + '"\n') monfile.write(' if status != 0 for 3 times within 5 cycles then exec "/etc/monit.d/scripts/critical ' + hostname + ' is not responding to SSH."\n\n') 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 with open(file, 'r') as stream: content = yaml.safe_load(stream) if os.path.isfile(monfilepath): os.remove(monfilepath) # Add DNS entries for each host hosttype = 'managed' for hostclass in ['physical','virtual','geth_hubs']: #WriteMonitoringEntry(content,hosttype,hostclass) WriteSSHMonitoringEntry(content,hosttype,hostclass) hosttype = 'unmanaged' for hostclass in ['ovas','appliances']: WriteMonitoringEntry(content,hosttype,hostclass) 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)