PVE-Zabbix/PVE-Zabbix.py

106 lines
3.6 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 = "KbCurGdt82NTgBye"
HOST = "localhost: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', 'disk'], 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')
parser.add_argument("-b", "--disk", dest='disk')
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']))
def exec_disk(**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 and kwargs['disk'] is not None:
try:
vm = next(v for v in vms if v.name == kwargs['name'])
print vm.get_diskvminfo(kwargs['disk'], kwargs['param'])
except StopIteration:
print "No such VM found. Possible VMs: " + str(VM.get_vmnames(NODE))
else:
try:
vm = next(v for v in vms if v.name == kwargs['name'])
print listofdicts_to_zabbix_json(vm.get_diskvmlist())
except StopIteration:
print "No such VM found. Possible VMs: " + str(VM.get_vmnames(NODE))
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)
elif args.type == "disk":
exec_disk(listing=args.listing, name=args.name, param=args.param, details=True, disk=args.disk)
else:
print args