diff options
author | Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com> | 2012-10-25 16:59:08 +0200 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2012-10-25 11:34:35 -0600 |
commit | dae52c3ca701ee7cd654b00375ae06e439010e2f (patch) | |
tree | f7605b7c8f6bcb98d302d026fe4c9d927bfa656d /libvirt-override.c | |
parent | 2594a007509ef20e94636089e26237af7e862609 (diff) | |
download | libvirt-python-split-dae52c3ca701ee7cd654b00375ae06e439010e2f.tar.gz libvirt-python-split-dae52c3ca701ee7cd654b00375ae06e439010e2f.tar.xz libvirt-python-split-dae52c3ca701ee7cd654b00375ae06e439010e2f.zip |
virNodeGetCPUMap: Add python binding
Added a method getCPUMap to virConnect.
It can be used as follows:
import libvirt
import sys
import os
conn = libvirt.openReadOnly(None)
if conn == None:
print 'Failed to open connection to the hypervisor'
sys.exit(1)
try:
(cpus, cpumap, online) = conn.getCPUMap(0)
except:
print 'Failed to extract the node cpu map information'
sys.exit(1)
print 'CPUs total %d, online %d' % (cpus, online)
print 'CPU map %s' % str(cpumap)
del conn
print "OK"
sys.exit(0)
Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'libvirt-override.c')
-rw-r--r-- | libvirt-override.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/libvirt-override.c b/libvirt-override.c index 83dc925..320f26a 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -6397,6 +6397,75 @@ cleanup: return ret; } +static PyObject * +libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ + virConnectPtr conn; + PyObject *pyobj_conn; + PyObject *ret = NULL; + PyObject *pycpumap = NULL; + PyObject *pyused = NULL; + PyObject *pycpunum = NULL; + PyObject *pyonline = NULL; + int i_retval; + unsigned char *cpumap = NULL; + unsigned int online = 0; + unsigned int flags; + int i; + + if (!PyArg_ParseTuple(args, (char *)"Oi:virNodeGetCPUMap", + &pyobj_conn, &flags)) + return NULL; + conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); + + LIBVIRT_BEGIN_ALLOW_THREADS; + i_retval = virNodeGetCPUMap(conn, &cpumap, &online, flags); + LIBVIRT_END_ALLOW_THREADS; + + if (i_retval < 0) + return VIR_PY_NONE; + + if ((ret = PyTuple_New(3)) == NULL) + goto error; + + /* 0: number of CPUs */ + if ((pycpunum = PyLong_FromLong(i_retval)) == NULL || + PyTuple_SetItem(ret, 0, pycpunum) < 0) + goto error; + + /* 1: CPU map */ + if ((pycpumap = PyList_New(i_retval)) == NULL) + goto error; + + for (i = 0; i < i_retval; i++) { + if ((pyused = PyBool_FromLong(VIR_CPU_USED(cpumap, i))) == NULL) + goto error; + if (PyList_SetItem(pycpumap, i, pyused) < 0) + goto error; + } + + if (PyTuple_SetItem(ret, 1, pycpumap) < 0) + goto error; + + /* 2: number of online CPUs */ + if ((pyonline = PyLong_FromLong(online)) == NULL || + PyTuple_SetItem(ret, 2, pyonline) < 0) + goto error; + +cleanup: + VIR_FREE(cpumap); + return ret; +error: + Py_XDECREF(ret); + Py_XDECREF(pycpumap); + Py_XDECREF(pyused); + Py_XDECREF(pycpunum); + Py_XDECREF(pyonline); + ret = NULL; + goto cleanup; +} + /************************************************************************ * * @@ -6514,6 +6583,7 @@ static PyMethodDef libvirtMethods[] = { {(char *) "virDomainGetDiskErrors", libvirt_virDomainGetDiskErrors, METH_VARARGS, NULL}, {(char *) "virNodeGetMemoryParameters", libvirt_virNodeGetMemoryParameters, METH_VARARGS, NULL}, {(char *) "virNodeSetMemoryParameters", libvirt_virNodeSetMemoryParameters, METH_VARARGS, NULL}, + {(char *) "virNodeGetCPUMap", libvirt_virNodeGetCPUMap, METH_VARARGS, NULL}, {NULL, NULL, 0, NULL} }; |