Files
athq-vm-management/main.py
2023-05-29 12:59:18 +00:00

69 lines
2.4 KiB
Python

import json
import os
import argparse
import vm
import sys
import jinja2
import icinga
import backup
import nginx
import pyansible
MASTER_ADDRESS = "atlantishq.de"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='AtlantisHQ VM Management Script',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--backup", action="store_const", default=False, const=True)
parser.add_argument("--skip-ansible", action="store_const", default=True, const=False)
parser.add_argument("--skip-nginx", action="store_const", default=True, const=False)
parser.add_argument("--skip-icinga", action="store_const", default=True, const=False)
parser.add_argument("--skip-ssh-config", action="store_const", default=True, const=False)
args = parser.parse_args()
FILE = "./config/vms.json"
vmList = []
skipVirsh = not any([args.skip_ansible, args.skip_nginx,
args.skip_icinga, args.skip_ssh_config])
with open(FILE) as f:
jsonList = json.load(f)
for obj in jsonList:
try:
vmo = vm.VM(obj, skipVirsh)
vmList.append(vmo)
except ValueError as e:
print(e, file=sys.stderr)
# dump nginx config #
if args.skip_nginx:
nginx.dump_config(vmList, MASTER_ADDRESS)
nginx.check_transparent_proxy_loader()
# dump icinga master
if args.skip_icinga:
icinga.createMasterHostConfig(vmList)
# dump ansible
if args.skip_ansible:
pyansible.dump_config(vmList)
# dump direct connect ssh-config
if args.skip_ssh_config:
with open("./ssh_config_for_clients", "w") as f:
for vmo in filter(lambda x: x.sshOutsidePort, set(vmList)):
f.write("Host {}\n".format(vmo.hostname + "." + MASTER_ADDRESS))
f.write(" Port {}\n".format(vmo.sshOutsidePort))
f.write(" User root\n")
f.write("\n")
# backup #
with open("./config/backup.json") as f:
backup.createBackupScriptStructure(json.load(f), baseDomain=MASTER_ADDRESS,
icingaOnly=not args.backup)
# copy nginx maps #
os.system("rsync templates/nginx_maps.j2 root@192.168.122.104:/data/certificate-manager/")