import urllib import urllib2 import ssl import json from VM import VM def get_auth(host, username, password): postdata = urllib.urlencode({'username': username, 'password': password}) url = "https://" + host + "/api2/json/access/ticket" req = urllib2.Request(url, postdata) response = urllib2.urlopen(req, context=ssl._create_unverified_context()) response = json.load(response) return response['data']['CSRFPreventionToken'], response['data']['ticket'] 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 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'] 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