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
|
from Storage import Storage
|
||||||
|
|
||||||
USERNAME = "zabbix@pve"
|
USERNAME = "zabbix@pve"
|
||||||
# TODO change password to example zabbix
|
|
||||||
PASSWORD = "zabbix"
|
PASSWORD = "zabbix"
|
||||||
HOST = "172.16.3.11:8006"
|
HOST = "172.16.3.11:8006"
|
||||||
|
|
||||||
|
|
@ -14,11 +13,12 @@ nodelist = conn.get_node_list()
|
||||||
|
|
||||||
parser = ArgumentParser()
|
parser = ArgumentParser()
|
||||||
parser.add_argument("node", help="Enter node name")
|
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("-l", "--list", dest='listing', action='store_true')
|
||||||
parser.add_argument("-n", "--name", dest='name')
|
parser.add_argument("-n", "--name", dest='name')
|
||||||
parser.add_argument("-d", "--details", dest='details', action='store_true')
|
parser.add_argument("-d", "--details", dest='details', action='store_true')
|
||||||
parser.add_argument("-p", "--param", dest='param')
|
parser.add_argument("-p", "--param", dest='param')
|
||||||
|
parser.add_argument("-b", "--disk", dest='disk')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
NODE = next((n for n in nodelist if n.name == args.node), None)
|
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)
|
raise ValueError("No such Node found", "Valid nodes:", nodelist)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def exec_vm(**kwargs):
|
def exec_vm(**kwargs):
|
||||||
"""
|
"""
|
||||||
Handles vm positional parameter
|
Handles vm positional parameter
|
||||||
|
|
@ -71,9 +69,37 @@ def exec_storage(**kwargs):
|
||||||
Storage.get_storagenames(NODE, name=kwargs['name'], listing=kwargs['listing']))
|
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":
|
if args.type == "vm":
|
||||||
exec_vm(listing=args.listing, name=args.name, param=args.param, details=args.details)
|
exec_vm(listing=args.listing, name=args.name, param=args.param, details=args.details)
|
||||||
elif args.type == "storage":
|
elif args.type == "storage":
|
||||||
exec_storage(listing=args.listing, name=args.name, param=args.param)
|
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:
|
else:
|
||||||
print args
|
print args
|
||||||
|
|
|
||||||
|
|
@ -97,8 +97,8 @@ class PVEApi(object):
|
||||||
|
|
||||||
if detailed is True:
|
if detailed is True:
|
||||||
vm_dattr = self.get_details(url, vmid)
|
vm_dattr = self.get_details(url, vmid)
|
||||||
for k,v in vm_dattr.items():
|
for k, v in vm_dattr.items():
|
||||||
vm.__setattr__('det_'+k, v)
|
vm.__setattr__('det_' + k, v)
|
||||||
|
|
||||||
vmlist.append(vm)
|
vmlist.append(vm)
|
||||||
return vmlist
|
return vmlist
|
||||||
|
|
@ -113,7 +113,7 @@ class PVEApi(object):
|
||||||
url = url + '/' + vmid + '/status/current'
|
url = url + '/' + vmid + '/status/current'
|
||||||
response = json.load(urllib2.urlopen(self.get_request(url), context=ssl._create_unverified_context()))
|
response = json.load(urllib2.urlopen(self.get_request(url), context=ssl._create_unverified_context()))
|
||||||
resources = response['data']
|
resources = response['data']
|
||||||
attributedict = dict()
|
attributedict = dict()
|
||||||
for param, paramvalue in resources.items():
|
for param, paramvalue in resources.items():
|
||||||
attributedict.update({param: paramvalue})
|
attributedict.update({param: paramvalue})
|
||||||
return attributedict
|
return attributedict
|
||||||
|
|
|
||||||
34
VM.py
34
VM.py
|
|
@ -29,7 +29,6 @@ class VM(object):
|
||||||
self.maxdisk = maxdisk
|
self.maxdisk = maxdisk
|
||||||
self.maxmem = maxmem
|
self.maxmem = maxmem
|
||||||
self.__url = url
|
self.__url = url
|
||||||
self.__dic = kwargs
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<%s-%s:%s>" % (self.node, self.vmid, self.name)
|
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)})
|
vm_params.append({'#' + param.upper(): self.__getattribute__(param)})
|
||||||
return listofdicts_to_zabbix_json(vm_params)
|
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):
|
def get_diskvminfo(self, disk, parameter=None):
|
||||||
print self.__dic
|
"""
|
||||||
|
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