From a0342a2ee5191762e9c899131cadd61c8ff544c3 Mon Sep 17 00:00:00 2001 From: osiu97 Date: Wed, 9 Jan 2019 15:11:57 +0100 Subject: [PATCH] added simple class for vm --- PVE-Zabbix.py | 11 +++++++++++ PVEApi.py | 51 ++++++++++++++++++++++++++++++++++++++++++++------- VM.py | 23 +++++++++++++++++++++++ 3 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 PVE-Zabbix.py create mode 100644 VM.py diff --git a/PVE-Zabbix.py b/PVE-Zabbix.py new file mode 100644 index 0000000..2a00a01 --- /dev/null +++ b/PVE-Zabbix.py @@ -0,0 +1,11 @@ +from PVEApi import PVEApi + +USERNAME = "zabbix@pve" +PASSWORD = "zabbix" +HOST = "172.16.3.11:8006" + +conn = PVEApi(HOST, USERNAME, PASSWORD) + +print conn.get_node_list() +for vm in conn.get_cluster_vmlist(): + print vm.node, vm.name, vm.vmid, vm.cpus diff --git a/PVEApi.py b/PVEApi.py index f491f4e..91b413a 100644 --- a/PVEApi.py +++ b/PVEApi.py @@ -2,10 +2,7 @@ import urllib import urllib2 import ssl import json - -USERNAME = "zabbix@pve" -PASSWORD = "zabbix" -HOST = "172.16.3.11:8006" +from VM import VM def get_auth(host, username, password): @@ -21,10 +18,50 @@ class PVEApi(object): def __init__(self, host, username, password): self.host = host + self.url = "https://" + self.host + "/api2/json" self.csrftoken = get_auth(self.host, username, password)[0] self.ticket = get_auth(self.host, username, password)[1] + def get_request(self, url): + req = urllib2.Request(url) + req.add_header('Cookie', 'PVEAuthCookie=' + self.ticket) + return req -conn = PVEApi(HOST, USERNAME, PASSWORD) -print conn.ticket -print conn.csrftoken + def get_node_list(self): + url = self.url + '/nodes' + response = json.load(urllib2.urlopen(self.get_request(url), context=ssl._create_unverified_context())) + resources = response['data'] + nodes = list() + for node in resources: + if type(node) is dict: + nodes.append(node[u'node']) + return nodes + + def get_cluster_vmlist(self): + vmlist = list() + for node in self.get_node_list(): + url = self.url + '/nodes/' + node + '/qemu' + response = json.load(urllib2.urlopen(self.get_request(url), context=ssl._create_unverified_context())) + resources = response['data'] + print resources + for machine in resources: + name = machine[u'name'] + status = machine[u'status'] + uptime = machine[u'uptime'] + diskread = machine[u'diskread'] + diskwrite = machine[u'diskwrite'] + memusage = machine[u'mem'] + pid = machine[u'pid'] + vmid = machine[u'vmid'] + netin = machine[u'netin'] + netout = machine[u'netout'] + cpus = machine[u'cpus'] + template = machine[u'template'] + disk = machine[u'disk'] + cpuusage = machine[u'cpu'] + maxdisk = machine[u'maxdisk'] + maxmem = machine[u'maxmem'] + vm = VM(node, name, status, uptime, diskread, diskwrite, memusage, pid, vmid, netin, netout, cpus, + template, disk, cpuusage, maxdisk, maxmem) + vmlist.append(vm) + return vmlist diff --git a/VM.py b/VM.py new file mode 100644 index 0000000..05a792d --- /dev/null +++ b/VM.py @@ -0,0 +1,23 @@ +class VM(object): + def __init__(self, node, name, status, uptime, diskread, diskwrite, memusage, pid, vmid, netin, netout, cpus, + template, disk, cpuusage, maxdisk, maxmem): + self.name = name + self.node = node + self.status = status + self.uptime = uptime + self.diskread = diskread + self.diskwrite = diskwrite + self.memusage = memusage + self.pid = pid + self.vmid = vmid + self.netin = netin + self.netout = netout + self.cpus = cpus + self.template = template + self.disk = disk + self.cpuusage = cpuusage + self.maxdisk = maxdisk + self.maxmem = maxmem + + def __repr__(self): + return "<%s:%s>" % (self.node, self.name)