mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-10 05:17:59 +03:00
Fix up the python bindings for snapshotting.
This involved a few fixes. To start with, an virDomainSnapshot object is really tied to a domain, not a connection, so we have to generate a slightly different object so that we can get at self._dom for the object. Next, we had to "dummy" up an override piece of XML with a bogus argument that the function doesn't actually take. That's so that the generator places virDomainRevertToSnapshot underneath the correct class (namely, the virDomain class). Finally, we had to hand-implement the virDomainRevertToSnapshot implementation, ignoring the bogus pointer we are being passed. With all of this in place, I was able to successfully take a snapshot and revert to it using only the Python bindings. Signed-off-by: Chris Lalancette <clalance@redhat.com>
This commit is contained in:
parent
20beb0c0db
commit
8749256d0b
@ -331,7 +331,7 @@ skip_impl = (
|
|||||||
'virNodeListDevices',
|
'virNodeListDevices',
|
||||||
'virNodeDeviceListCaps',
|
'virNodeDeviceListCaps',
|
||||||
'virConnectBaselineCPU',
|
'virConnectBaselineCPU',
|
||||||
'virDomainSnapshotListNames',
|
'virDomainRevertToSnapshot',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -385,6 +385,10 @@ skip_function = (
|
|||||||
"virStorageVolGetConnect",
|
"virStorageVolGetConnect",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
function_skip_index_one = (
|
||||||
|
"virDomainRevertToSnapshot",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def print_function_wrapper(name, output, export, include):
|
def print_function_wrapper(name, output, export, include):
|
||||||
global py_types
|
global py_types
|
||||||
@ -688,9 +692,13 @@ classes_destructors = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class_skip_connect_impl = {
|
class_skip_connect_impl = {
|
||||||
"virConnect" : True
|
"virConnect" : True,
|
||||||
|
"virDomainSnapshot": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class_domain_impl = {
|
||||||
|
"virDomainSnapshot": True,
|
||||||
|
}
|
||||||
|
|
||||||
functions_noexcept = {
|
functions_noexcept = {
|
||||||
'virDomainGetID': True,
|
'virDomainGetID': True,
|
||||||
@ -986,7 +994,7 @@ def buildWrappers():
|
|||||||
info = (0, func, name, ret, args, file)
|
info = (0, func, name, ret, args, file)
|
||||||
function_classes[classe].append(info)
|
function_classes[classe].append(info)
|
||||||
elif name[0:3] == "vir" and len(args) >= 2 and args[1][1] == type \
|
elif name[0:3] == "vir" and len(args) >= 2 and args[1][1] == type \
|
||||||
and file != "python_accessor":
|
and file != "python_accessor" and not name in function_skip_index_one:
|
||||||
found = 1
|
found = 1
|
||||||
func = nameFixup(name, classe, type, file)
|
func = nameFixup(name, classe, type, file)
|
||||||
info = (1, func, name, ret, args, file)
|
info = (1, func, name, ret, args, file)
|
||||||
@ -1128,6 +1136,8 @@ def buildWrappers():
|
|||||||
"virStorageVol", "virNodeDevice", "virSecret","virStream",
|
"virStorageVol", "virNodeDevice", "virSecret","virStream",
|
||||||
"virNWFilter" ]:
|
"virNWFilter" ]:
|
||||||
classes.write(" def __init__(self, conn, _obj=None):\n")
|
classes.write(" def __init__(self, conn, _obj=None):\n")
|
||||||
|
elif classname in [ 'virDomainSnapshot' ]:
|
||||||
|
classes.write(" def __init__(self, dom, _obj=None):\n")
|
||||||
else:
|
else:
|
||||||
classes.write(" def __init__(self, _obj=None):\n")
|
classes.write(" def __init__(self, _obj=None):\n")
|
||||||
if reference_keepers.has_key(classname):
|
if reference_keepers.has_key(classname):
|
||||||
@ -1142,6 +1152,8 @@ def buildWrappers():
|
|||||||
classes.write(" self._conn = conn\n" + \
|
classes.write(" self._conn = conn\n" + \
|
||||||
" if not isinstance(conn, virConnect):\n" + \
|
" if not isinstance(conn, virConnect):\n" + \
|
||||||
" self._conn = conn._conn\n")
|
" self._conn = conn._conn\n")
|
||||||
|
elif classname in [ "virDomainSnapshot" ]:
|
||||||
|
classes.write(" self._dom = dom\n")
|
||||||
classes.write(" if _obj != None:self._o = _obj;return\n")
|
classes.write(" if _obj != None:self._o = _obj;return\n")
|
||||||
classes.write(" self._o = None\n\n");
|
classes.write(" self._o = None\n\n");
|
||||||
destruct=None
|
destruct=None
|
||||||
@ -1158,6 +1170,10 @@ def buildWrappers():
|
|||||||
classes.write(" def connect(self):\n")
|
classes.write(" def connect(self):\n")
|
||||||
classes.write(" return self._conn\n\n")
|
classes.write(" return self._conn\n\n")
|
||||||
|
|
||||||
|
if class_domain_impl.has_key(classname):
|
||||||
|
classes.write(" def domain(self):\n")
|
||||||
|
classes.write(" return self._dom\n\n")
|
||||||
|
|
||||||
flist = function_classes[classname]
|
flist = function_classes[classname]
|
||||||
flist.sort(functionCompare)
|
flist.sort(functionCompare)
|
||||||
oldfile = ""
|
oldfile = ""
|
||||||
@ -1252,6 +1268,10 @@ def buildWrappers():
|
|||||||
classes.write(
|
classes.write(
|
||||||
" if ret is None:raise libvirtError('%s() failed', vol=self)\n" %
|
" if ret is None:raise libvirtError('%s() failed', vol=self)\n" %
|
||||||
(name))
|
(name))
|
||||||
|
elif classname == "virDomainSnapshot":
|
||||||
|
classes.write(
|
||||||
|
" if ret is None:raise libvirtError('%s() failed', dom=self._dom)\n" %
|
||||||
|
(name))
|
||||||
else:
|
else:
|
||||||
classes.write(
|
classes.write(
|
||||||
" if ret is None:raise libvirtError('%s() failed')\n" %
|
" if ret is None:raise libvirtError('%s() failed')\n" %
|
||||||
|
@ -277,5 +277,12 @@
|
|||||||
<arg name='flags' type='unsigned int' info='flags, curently unused'/>
|
<arg name='flags' type='unsigned int' info='flags, curently unused'/>
|
||||||
<return type='str *' info='the list of Names of None in case of error'/>
|
<return type='str *' info='the list of Names of None in case of error'/>
|
||||||
</function>
|
</function>
|
||||||
|
<function name='virDomainRevertToSnapshot' file='python'>
|
||||||
|
<info>revert the domain to the given snapshot</info>
|
||||||
|
<arg name='dom' type='virDomainPtr' info='dummy domain pointer'/>
|
||||||
|
<arg name='snap' type='virDomainSnapshotPtr' info='pointer to the snapshot'/>
|
||||||
|
<arg name='flags' type='unsigned int' info='flags, curently unused'/>
|
||||||
|
<return type='int' info="0 on success, -1 on error"/>
|
||||||
|
</function>
|
||||||
</symbols>
|
</symbols>
|
||||||
</api>
|
</api>
|
||||||
|
@ -987,6 +987,28 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED,
|
|||||||
return(py_retval);
|
return(py_retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
libvirt_virDomainRevertToSnapshot(PyObject *self ATTRIBUTE_UNUSED,
|
||||||
|
PyObject *args) {
|
||||||
|
int c_retval;
|
||||||
|
virDomainSnapshotPtr snap;
|
||||||
|
PyObject *pyobj_snap;
|
||||||
|
PyObject *pyobj_dom;
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, (char *)"OOi:virDomainRevertToSnapshot", &pyobj_dom, &pyobj_snap, &flags))
|
||||||
|
return(NULL);
|
||||||
|
snap = (virDomainSnapshotPtr) PyvirDomainSnapshot_Get(pyobj_snap);
|
||||||
|
|
||||||
|
LIBVIRT_BEGIN_ALLOW_THREADS;
|
||||||
|
c_retval = virDomainRevertToSnapshot(snap, flags);
|
||||||
|
LIBVIRT_END_ALLOW_THREADS;
|
||||||
|
if (c_retval < 0)
|
||||||
|
return VIR_PY_INT_FAIL;
|
||||||
|
|
||||||
|
return PyInt_FromLong(c_retval);
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
|
libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
|
||||||
PyObject *py_retval;
|
PyObject *py_retval;
|
||||||
@ -3527,6 +3549,7 @@ static PyMethodDef libvirtMethods[] = {
|
|||||||
{(char *) "virConnectBaselineCPU", libvirt_virConnectBaselineCPU, METH_VARARGS, NULL},
|
{(char *) "virConnectBaselineCPU", libvirt_virConnectBaselineCPU, METH_VARARGS, NULL},
|
||||||
{(char *) "virDomainGetJobInfo", libvirt_virDomainGetJobInfo, METH_VARARGS, NULL},
|
{(char *) "virDomainGetJobInfo", libvirt_virDomainGetJobInfo, METH_VARARGS, NULL},
|
||||||
{(char *) "virDomainSnapshotListNames", libvirt_virDomainSnapshotListNames, METH_VARARGS, NULL},
|
{(char *) "virDomainSnapshotListNames", libvirt_virDomainSnapshotListNames, METH_VARARGS, NULL},
|
||||||
|
{(char *) "virDomainRevertToSnapshot", libvirt_virDomainRevertToSnapshot, METH_VARARGS, NULL},
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user