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) parser.add_argument("--do-nginx-map-cert-manager", action="store_const", default=False, const=True) 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 # if not args.backup and args.do_nginx_map_cert_manager: os.system("rsync templates/nginx_maps.j2 root@192.168.122.104:/data/certificate-manager/")