from PVEApi import PVEApi from ZabbixJSON import listofdicts_to_zabbix_json from argparse import ArgumentParser from VM import VM from Storage import Storage USERNAME = "zabbix@pve" # TODO change password to example zabbix PASSWORD = "zabbix" HOST = "172.16.3.11:8006" conn = PVEApi(HOST, USERNAME, PASSWORD) nodelist = conn.get_node_list() parser = ArgumentParser() parser.add_argument("node", help="Enter node name") parser.add_argument("type", choices=['vm', 'storage'], help='categories') parser.add_argument("-l", "--list", dest='listing', action='store_true') parser.add_argument("-n", "--name", dest='name') parser.add_argument("-d", "--details", dest='details', action='store_true') parser.add_argument("-p", "--param", dest='param') args = parser.parse_args() NODE = next((n for n in nodelist if n.name == args.node), None) if NODE is None: raise ValueError("No such Node found", "Valid nodes:", nodelist) def exec_vm(**kwargs): """ Handles vm positional parameter :param kwargs: handle cmd parametres :return: """ # Initiate instances if kwargs['details'] is True: vms = conn.get_cluster_vmlist(nodelist, detailed=True) else: vms = conn.get_cluster_vmlist(nodelist) if kwargs['name'] is not None and kwargs['listing'] is False: try: vm = next(v for v in vms if v.name == kwargs['name']) print vm.get_vminfo(kwargs['param']) except StopIteration: print "No such VM found. Possible VMs: " + str(VM.get_vmnames(NODE)) else: print listofdicts_to_zabbix_json( VM.get_vmnames(NODE, name=kwargs['name'], listing=kwargs['listing'])) def exec_storage(**kwargs): """ Handles storage positional parameter :param kwargs: handle cmd parametres :return: """ # Initiate instances stors = conn.get_cluster_storagelist(nodelist) if kwargs['name'] is not None and kwargs['listing'] is False: try: stor = next(v for v in stors if (v.name == kwargs['name'] and v.node == NODE.name)) print stor.get_storageinfo(kwargs['param']) except StopIteration: print "No such storage found. Possible VMs: " + str(Storage.get_storagenames(NODE)) else: print listofdicts_to_zabbix_json( Storage.get_storagenames(NODE, name=kwargs['name'], listing=kwargs['listing'])) if args.type == "vm": exec_vm(listing=args.listing, name=args.name, param=args.param, details=args.details) elif args.type == "storage": exec_storage(listing=args.listing, name=args.name, param=args.param) else: print args