added disk collector
probably for seperate template as it slows zabbix agent too much
This commit is contained in:
parent
fbf27eecd0
commit
c7bb74ce69
|
|
@ -5,7 +5,6 @@ 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"
|
||||
|
||||
|
|
@ -14,11 +13,12 @@ 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("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)
|
||||
|
||||
|
|
@ -26,8 +26,6 @@ if NODE is None:
|
|||
raise ValueError("No such Node found", "Valid nodes:", nodelist)
|
||||
|
||||
|
||||
|
||||
|
||||
def exec_vm(**kwargs):
|
||||
"""
|
||||
Handles vm positional parameter
|
||||
|
|
@ -71,9 +69,37 @@ def exec_storage(**kwargs):
|
|||
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
|
||||
|
|
|
|||
|
|
@ -97,8 +97,8 @@ class PVEApi(object):
|
|||
|
||||
if detailed is True:
|
||||
vm_dattr = self.get_details(url, vmid)
|
||||
for k,v in vm_dattr.items():
|
||||
vm.__setattr__('det_'+k, v)
|
||||
for k, v in vm_dattr.items():
|
||||
vm.__setattr__('det_' + k, v)
|
||||
|
||||
vmlist.append(vm)
|
||||
return vmlist
|
||||
|
|
@ -113,7 +113,7 @@ class PVEApi(object):
|
|||
url = url + '/' + vmid + '/status/current'
|
||||
response = json.load(urllib2.urlopen(self.get_request(url), context=ssl._create_unverified_context()))
|
||||
resources = response['data']
|
||||
attributedict = dict()
|
||||
attributedict = dict()
|
||||
for param, paramvalue in resources.items():
|
||||
attributedict.update({param: paramvalue})
|
||||
return attributedict
|
||||
|
|
|
|||
34
VM.py
34
VM.py
|
|
@ -29,7 +29,6 @@ class VM(object):
|
|||
self.maxdisk = maxdisk
|
||||
self.maxmem = maxmem
|
||||
self.__url = url
|
||||
self.__dic = kwargs
|
||||
|
||||
def __repr__(self):
|
||||
return "<%s-%s:%s>" % (self.node, self.vmid, self.name)
|
||||
|
|
@ -71,6 +70,35 @@ class VM(object):
|
|||
vm_params.append({'#' + param.upper(): self.__getattribute__(param)})
|
||||
return listofdicts_to_zabbix_json(vm_params)
|
||||
|
||||
def get_diskvmlist(self):
|
||||
"""
|
||||
Gets list of dicts blockdevices configured in VM for use in Zabbix Discovery
|
||||
:return: list of dicts blockdevices
|
||||
"""
|
||||
blockdevices = list()
|
||||
try:
|
||||
for disk in self.det_blockstat.keys():
|
||||
blockdevices.append({'#DISKNAME': disk})
|
||||
except AttributeError:
|
||||
print "Could not find disks for machine "
|
||||
return blockdevices
|
||||
|
||||
def get_detailedvminfo(self):
|
||||
print self.__dic
|
||||
def get_diskvminfo(self, disk, parameter=None):
|
||||
"""
|
||||
Gets VM blockdevice stats
|
||||
:param disk: disk name in vm
|
||||
:param parameter: if specified get specific param
|
||||
:return: list of dicts with params or just param value for specific element
|
||||
"""
|
||||
if parameter is not None:
|
||||
for diskname, param in self.det_blockstat.items():
|
||||
if diskname == disk:
|
||||
for p, v in param.iteritems():
|
||||
if p == parameter:
|
||||
return v
|
||||
else:
|
||||
disk_params = list()
|
||||
for diskname, param in self.det_blockstat.items():
|
||||
if diskname == disk:
|
||||
disk_params.append(param)
|
||||
return listofdicts_to_zabbix_json(disk_params)
|
||||
|
|
|
|||
Loading…
Reference in New Issue