73 lines
2.4 KiB
Python
Executable File
73 lines
2.4 KiB
Python
Executable File
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"
|
|
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("-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
|
|
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)
|
|
|
|
# FIXME consider node name to avoid random results from duplicate storage names
|
|
if kwargs['name'] is not None and kwargs['listing'] is False:
|
|
try:
|
|
stor = next(v for v in stors if v.name == kwargs['name'])
|
|
print stor.get_storageinfo(kwargs['param'])
|
|
except StopIteration:
|
|
print "No such VM found. Possible VMs: " + str(VM.get_vmnames(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)
|
|
elif args.type == "storage":
|
|
exec_storage(listing=args.listing, name=args.name, param=args.param)
|
|
else:
|
|
print args
|