mirror of
https://gitlab.com/libvirt/libvirt-python.git
synced 2025-08-04 12:21:57 +03:00
Secret manipulation API docs refresh & wire up python generator
Sample session: >>> import libvirt >>> c = libvirt.open('qemu:///session') >>> c.listSecrets() ['12247729-47d2-a783-88ce-b329d4781cd3', 'reee', 'abc'] >>> s = c.secretDefineXML("<secret ephemeral='no' private='no'>\n<description>Something for use</description>\n<volume>/foo/bar</volume>\n</secret>\n") >>> s.UUIDString() '340c2dfb-811b-eda8-da9e-25ccd7bfd650' >>> s.XMLDesc() "<secret ephemeral='no' private='no'>\n <uuid>340c2dfb-811b-eda8-da9e-25ccd7bfd650</uuid>\n <description>Something for use</description>\n <volume>/foo/bar</volume>\n</secret>\n" >>> s.setValue('abc\0xx\xffx') 0 >>> s.value() 'abc\x00xx\xffx' >>> s.undefine() 0 * python/generator.py: Add rules for virSecret APIs * python/libvir.c, python/libvirt-python-api.xml: Manual impl of virSecretSetValue, virSecretGetValue$ and virConnectListSecrets APIs * python/libvirt_wrap.h, python/types.c: Wrapper for virSecret objects * docs/libvirt-api.xml, docs/libvirt-refs.xml, docs/html/libvirt-virterror.html, docs/html/libvirt-libvirt.html, docs/devhelp/libvirt-virterror.html, docs/devhelp/libvirt-libvirt.html: Re-generate with 'make api'
This commit is contained in:
committed by
Daniel P. Berrange
parent
a5d4455ba2
commit
11bca8e4d9
31
generator.py
31
generator.py
@ -270,6 +270,11 @@ py_types = {
|
|||||||
'const virNodeDevicePtr': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr"),
|
'const virNodeDevicePtr': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr"),
|
||||||
'virNodeDevice *': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr"),
|
'virNodeDevice *': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr"),
|
||||||
'const virNodeDevice *': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr"),
|
'const virNodeDevice *': ('O', "virNodeDevice", "virNodeDevicePtr", "virNodeDevicePtr"),
|
||||||
|
|
||||||
|
'virSecretPtr': ('O', "virSecret", "virSecretPtr", "virSecretPtr"),
|
||||||
|
'const virSecretPtr': ('O', "virSecret", "virSecretPtr", "virSecretPtr"),
|
||||||
|
'virSecret *': ('O', "virSecret", "virSecretPtr", "virSecretPtr"),
|
||||||
|
'const virSecret *': ('O', "virSecret", "virSecretPtr", "virSecretPtr"),
|
||||||
}
|
}
|
||||||
|
|
||||||
py_return_types = {
|
py_return_types = {
|
||||||
@ -296,6 +301,7 @@ skip_impl = (
|
|||||||
'virConnectListDefinedNetworks',
|
'virConnectListDefinedNetworks',
|
||||||
'virConnectListInterfaces',
|
'virConnectListInterfaces',
|
||||||
'virConnectListDefinedInterfaces',
|
'virConnectListDefinedInterfaces',
|
||||||
|
'virConnectListSecrets',
|
||||||
'virConnectListStoragePools',
|
'virConnectListStoragePools',
|
||||||
'virConnectListDefinedStoragePools',
|
'virConnectListDefinedStoragePools',
|
||||||
'virConnectListStorageVols',
|
'virConnectListStorageVols',
|
||||||
@ -320,6 +326,8 @@ skip_impl = (
|
|||||||
'virDomainSetSchedulerParameters',
|
'virDomainSetSchedulerParameters',
|
||||||
'virDomainGetVcpus',
|
'virDomainGetVcpus',
|
||||||
'virDomainPinVcpu',
|
'virDomainPinVcpu',
|
||||||
|
'virSecretGetValue',
|
||||||
|
'virSecretSetValue',
|
||||||
'virStoragePoolGetUUID',
|
'virStoragePoolGetUUID',
|
||||||
'virStoragePoolGetUUIDString',
|
'virStoragePoolGetUUIDString',
|
||||||
'virStoragePoolLookupByUUID',
|
'virStoragePoolLookupByUUID',
|
||||||
@ -623,6 +631,8 @@ classes_type = {
|
|||||||
"virStorageVol *": ("._o", "virStorageVol(self, _obj=%s)", "virStorageVol"),
|
"virStorageVol *": ("._o", "virStorageVol(self, _obj=%s)", "virStorageVol"),
|
||||||
"virNodeDevicePtr": ("._o", "virNodeDevice(self, _obj=%s)", "virNodeDevice"),
|
"virNodeDevicePtr": ("._o", "virNodeDevice(self, _obj=%s)", "virNodeDevice"),
|
||||||
"virNodeDevice *": ("._o", "virNodeDevice(self, _obj=%s)", "virNodeDevice"),
|
"virNodeDevice *": ("._o", "virNodeDevice(self, _obj=%s)", "virNodeDevice"),
|
||||||
|
"virSecretPtr": ("._o", "virSecret(self, _obj=%s)", "virSecret"),
|
||||||
|
"virSecret *": ("._o", "virSecret(self, _obj=%s)", "virSecret"),
|
||||||
"virConnectPtr": ("._o", "virConnect(_obj=%s)", "virConnect"),
|
"virConnectPtr": ("._o", "virConnect(_obj=%s)", "virConnect"),
|
||||||
"virConnect *": ("._o", "virConnect(_obj=%s)", "virConnect"),
|
"virConnect *": ("._o", "virConnect(_obj=%s)", "virConnect"),
|
||||||
}
|
}
|
||||||
@ -632,7 +642,7 @@ converter_type = {
|
|||||||
|
|
||||||
primary_classes = ["virDomain", "virNetwork", "virInterface",
|
primary_classes = ["virDomain", "virNetwork", "virInterface",
|
||||||
"virStoragePool", "virStorageVol",
|
"virStoragePool", "virStorageVol",
|
||||||
"virConnect", "virNodeDevice" ]
|
"virConnect", "virNodeDevice", "virSecret" ]
|
||||||
|
|
||||||
classes_ancestor = {
|
classes_ancestor = {
|
||||||
}
|
}
|
||||||
@ -642,7 +652,8 @@ classes_destructors = {
|
|||||||
"virInterface": "virInterfaceFree",
|
"virInterface": "virInterfaceFree",
|
||||||
"virStoragePool": "virStoragePoolFree",
|
"virStoragePool": "virStoragePoolFree",
|
||||||
"virStorageVol": "virStorageVolFree",
|
"virStorageVol": "virStorageVolFree",
|
||||||
"virNodeDevice" : "virNodeDeviceFree"
|
"virNodeDevice" : "virNodeDeviceFree",
|
||||||
|
"virSecret": "virSecretFree"
|
||||||
}
|
}
|
||||||
|
|
||||||
functions_noexcept = {
|
functions_noexcept = {
|
||||||
@ -714,6 +725,12 @@ def nameFixup(name, classe, type, file):
|
|||||||
elif name[0:18] == "virInterfaceLookup":
|
elif name[0:18] == "virInterfaceLookup":
|
||||||
func = name[3:]
|
func = name[3:]
|
||||||
func = string.lower(func[0:1]) + func[1:]
|
func = string.lower(func[0:1]) + func[1:]
|
||||||
|
elif name[0:15] == "virSecretDefine":
|
||||||
|
func = name[3:]
|
||||||
|
func = string.lower(func[0:1]) + func[1:]
|
||||||
|
elif name[0:15] == "virSecretLookup":
|
||||||
|
func = name[3:]
|
||||||
|
func = string.lower(func[0:1]) + func[1:]
|
||||||
elif name[0:20] == "virStoragePoolDefine":
|
elif name[0:20] == "virStoragePoolDefine":
|
||||||
func = name[3:]
|
func = name[3:]
|
||||||
func = string.lower(func[0:1]) + func[1:]
|
func = string.lower(func[0:1]) + func[1:]
|
||||||
@ -747,6 +764,12 @@ def nameFixup(name, classe, type, file):
|
|||||||
elif name[0:12] == "virInterface":
|
elif name[0:12] == "virInterface":
|
||||||
func = name[10:]
|
func = name[10:]
|
||||||
func = string.lower(func[0:1]) + func[1:]
|
func = string.lower(func[0:1]) + func[1:]
|
||||||
|
elif name[0:12] == 'virSecretGet':
|
||||||
|
func = name[12:]
|
||||||
|
func = string.lower(func[0:1]) + func[1:]
|
||||||
|
elif name[0:9] == 'virSecret':
|
||||||
|
func = name[9:]
|
||||||
|
func = string.lower(func[0:1]) + func[1:]
|
||||||
elif name[0:17] == "virStoragePoolGet":
|
elif name[0:17] == "virStoragePoolGet":
|
||||||
func = name[17:]
|
func = name[17:]
|
||||||
func = string.lower(func[0:1]) + func[1:]
|
func = string.lower(func[0:1]) + func[1:]
|
||||||
@ -1018,7 +1041,7 @@ def buildWrappers():
|
|||||||
else:
|
else:
|
||||||
txt.write("Class %s()\n" % (classname))
|
txt.write("Class %s()\n" % (classname))
|
||||||
classes.write("class %s:\n" % (classname))
|
classes.write("class %s:\n" % (classname))
|
||||||
if classname in [ "virDomain", "virNetwork", "virInterface", "virStoragePool", "virStorageVol", "virNodeDevice" ]:
|
if classname in [ "virDomain", "virNetwork", "virInterface", "virStoragePool", "virStorageVol", "virNodeDevice", "virSecret" ]:
|
||||||
classes.write(" def __init__(self, conn, _obj=None):\n")
|
classes.write(" def __init__(self, conn, _obj=None):\n")
|
||||||
else:
|
else:
|
||||||
classes.write(" def __init__(self, _obj=None):\n")
|
classes.write(" def __init__(self, _obj=None):\n")
|
||||||
@ -1026,7 +1049,7 @@ def buildWrappers():
|
|||||||
list = reference_keepers[classname]
|
list = reference_keepers[classname]
|
||||||
for ref in list:
|
for ref in list:
|
||||||
classes.write(" self.%s = None\n" % ref[1])
|
classes.write(" self.%s = None\n" % ref[1])
|
||||||
if classname in [ "virDomain", "virNetwork", "virInterface", "virNodeDevice" ]:
|
if classname in [ "virDomain", "virNetwork", "virInterface", "virNodeDevice", "virSecret" ]:
|
||||||
classes.write(" self._conn = conn\n")
|
classes.write(" self._conn = conn\n")
|
||||||
elif classname in [ "virStorageVol", "virStoragePool" ]:
|
elif classname in [ "virStorageVol", "virStoragePool" ]:
|
||||||
classes.write(" self._conn = conn\n" + \
|
classes.write(" self._conn = conn\n" + \
|
||||||
|
100
libvir.c
100
libvir.c
@ -1562,6 +1562,103 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED,
|
|||||||
return(py_retval);
|
return(py_retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED,
|
||||||
|
PyObject *args) {
|
||||||
|
PyObject *py_retval;
|
||||||
|
char **uuids = NULL;
|
||||||
|
virConnectPtr conn;
|
||||||
|
int c_retval, i;
|
||||||
|
PyObject *pyobj_conn;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, (char *)"O:virConnectListSecrets", &pyobj_conn))
|
||||||
|
return NULL;
|
||||||
|
conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn);
|
||||||
|
|
||||||
|
LIBVIRT_BEGIN_ALLOW_THREADS;
|
||||||
|
c_retval = virConnectNumOfSecrets(conn);
|
||||||
|
LIBVIRT_END_ALLOW_THREADS;
|
||||||
|
if (c_retval < 0)
|
||||||
|
return VIR_PY_NONE;
|
||||||
|
|
||||||
|
if (c_retval) {
|
||||||
|
uuids = malloc(sizeof(*uuids) * c_retval);
|
||||||
|
if (!uuids)
|
||||||
|
return VIR_PY_NONE;
|
||||||
|
LIBVIRT_BEGIN_ALLOW_THREADS;
|
||||||
|
c_retval = virConnectListSecrets(conn, uuids, c_retval);
|
||||||
|
LIBVIRT_END_ALLOW_THREADS;
|
||||||
|
if (c_retval < 0) {
|
||||||
|
free(uuids);
|
||||||
|
return VIR_PY_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
py_retval = PyList_New(c_retval);
|
||||||
|
|
||||||
|
if (uuids) {
|
||||||
|
for (i = 0;i < c_retval;i++) {
|
||||||
|
PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i]));
|
||||||
|
free(uuids[i]);
|
||||||
|
}
|
||||||
|
free(uuids);
|
||||||
|
}
|
||||||
|
|
||||||
|
return py_retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
libvirt_virSecretGetValue(PyObject *self ATTRIBUTE_UNUSED,
|
||||||
|
PyObject *args) {
|
||||||
|
PyObject *py_retval;
|
||||||
|
unsigned char *c_retval;
|
||||||
|
size_t size;
|
||||||
|
virSecretPtr secret;
|
||||||
|
PyObject *pyobj_secret;
|
||||||
|
unsigned int flags;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, (char *)"Oi:virSecretGetValue", &pyobj_secret,
|
||||||
|
&flags))
|
||||||
|
return NULL;
|
||||||
|
secret = (virSecretPtr) PyvirSecret_Get(pyobj_secret);
|
||||||
|
|
||||||
|
LIBVIRT_BEGIN_ALLOW_THREADS;
|
||||||
|
c_retval = virSecretGetValue(secret, &size, flags);
|
||||||
|
LIBVIRT_END_ALLOW_THREADS;
|
||||||
|
|
||||||
|
if (c_retval == NULL)
|
||||||
|
return VIR_PY_NONE;
|
||||||
|
|
||||||
|
py_retval = PyString_FromStringAndSize((const char *)c_retval, size);
|
||||||
|
memset(c_retval, 0, size);
|
||||||
|
free(c_retval);
|
||||||
|
|
||||||
|
return py_retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
libvirt_virSecretSetValue(PyObject *self ATTRIBUTE_UNUSED,
|
||||||
|
PyObject *args) {
|
||||||
|
PyObject *py_retval;
|
||||||
|
int c_retval;
|
||||||
|
virSecretPtr secret;
|
||||||
|
PyObject *pyobj_secret;
|
||||||
|
const char *value;
|
||||||
|
int size;
|
||||||
|
unsigned int flags;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, (char *)"Oz#i:virSecretSetValue", &pyobj_secret,
|
||||||
|
&value, &size, &flags))
|
||||||
|
return NULL;
|
||||||
|
secret = (virSecretPtr) PyvirSecret_Get(pyobj_secret);
|
||||||
|
|
||||||
|
LIBVIRT_BEGIN_ALLOW_THREADS;
|
||||||
|
c_retval = virSecretSetValue(secret, (const unsigned char *)value, size,
|
||||||
|
flags);
|
||||||
|
LIBVIRT_END_ALLOW_THREADS;
|
||||||
|
|
||||||
|
py_retval = libvirt_intWrap(c_retval);
|
||||||
|
return py_retval;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************
|
/*******************************************
|
||||||
* Helper functions to avoid importing modules
|
* Helper functions to avoid importing modules
|
||||||
@ -2261,6 +2358,9 @@ static PyMethodDef libvirtMethods[] = {
|
|||||||
{(char *) "virEventInvokeTimeoutCallback", libvirt_virEventInvokeTimeoutCallback, METH_VARARGS, NULL},
|
{(char *) "virEventInvokeTimeoutCallback", libvirt_virEventInvokeTimeoutCallback, METH_VARARGS, NULL},
|
||||||
{(char *) "virNodeListDevices", libvirt_virNodeListDevices, METH_VARARGS, NULL},
|
{(char *) "virNodeListDevices", libvirt_virNodeListDevices, METH_VARARGS, NULL},
|
||||||
{(char *) "virNodeDeviceListCaps", libvirt_virNodeDeviceListCaps, METH_VARARGS, NULL},
|
{(char *) "virNodeDeviceListCaps", libvirt_virNodeDeviceListCaps, METH_VARARGS, NULL},
|
||||||
|
{(char *) "virConnectListSecrets", libvirt_virConnectListSecrets, METH_VARARGS, NULL},
|
||||||
|
{(char *) "virSecretGetValue", libvirt_virSecretGetValue, METH_VARARGS, NULL},
|
||||||
|
{(char *) "virSecretSetValue", libvirt_virSecretSetValue, METH_VARARGS, NULL},
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -172,5 +172,23 @@
|
|||||||
<arg name='dev' type='virNodeDevicePtr' info='pointer to the node device'/>
|
<arg name='dev' type='virNodeDevicePtr' info='pointer to the node device'/>
|
||||||
<return type='str *' info='the list of Names or None in case of error'/>
|
<return type='str *' info='the list of Names or None in case of error'/>
|
||||||
</function>
|
</function>
|
||||||
|
<function name='virSecretGetValue' file='libvirt' module='libvirt'>
|
||||||
|
<info>Fetches the value associated with a secret.</info>
|
||||||
|
<return type='char *' info='the secret value or None in case of error'/>
|
||||||
|
<arg name='secret' type='virSecretPtr' info='virSecret secret'/>
|
||||||
|
<arg name='flags' type='unsigned int' info='flags (unused; pass 0)'/>
|
||||||
|
</function>
|
||||||
|
<function name='virConnectListSecrets' file='libvirt' module='libvirt'>
|
||||||
|
<info>List the defined secret IDs</info>
|
||||||
|
<arg name='conn' type='virConnectPtr' info='virConnect connection'/>
|
||||||
|
<return type='str *' info='the list of secret IDs or None in case of error'/>
|
||||||
|
</function>
|
||||||
|
<function name='virSecretSetValue' file='libvirt' module='libvirt'>
|
||||||
|
<info>Associates a value with a secret.</info>
|
||||||
|
<return type='int' info='0 on success, -1 on failure.'/>
|
||||||
|
<arg name='secret' type='virSecretPtr' info='virSecret secret'/>
|
||||||
|
<arg name='value' type='const char *' info='The secret value'/>
|
||||||
|
<arg name='flags' type='unsigned int' info='flags (unused; pass 0)'/>
|
||||||
|
</function>
|
||||||
</symbols>
|
</symbols>
|
||||||
</api>
|
</api>
|
||||||
|
@ -83,6 +83,14 @@ typedef struct {
|
|||||||
virNodeDevicePtr obj;
|
virNodeDevicePtr obj;
|
||||||
} PyvirNodeDevice_Object;
|
} PyvirNodeDevice_Object;
|
||||||
|
|
||||||
|
#define PyvirSecret_Get(v) (((v) == Py_None) ? NULL : \
|
||||||
|
(((PyvirSecret_Object *)(v))->obj))
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
virSecretPtr obj;
|
||||||
|
} PyvirSecret_Object;
|
||||||
|
|
||||||
|
|
||||||
#define PyvirEventHandleCallback_Get(v) (((v) == Py_None) ? NULL : \
|
#define PyvirEventHandleCallback_Get(v) (((v) == Py_None) ? NULL : \
|
||||||
(((PyvirEventHandleCallback_Object *)(v))->obj))
|
(((PyvirEventHandleCallback_Object *)(v))->obj))
|
||||||
@ -135,6 +143,7 @@ PyObject * libvirt_virEventTimeoutCallbackWrap(virEventTimeoutCallback node);
|
|||||||
PyObject * libvirt_virFreeCallbackWrap(virFreeCallback node);
|
PyObject * libvirt_virFreeCallbackWrap(virFreeCallback node);
|
||||||
PyObject * libvirt_virVoidPtrWrap(void* node);
|
PyObject * libvirt_virVoidPtrWrap(void* node);
|
||||||
PyObject * libvirt_virNodeDevicePtrWrap(virNodeDevicePtr node);
|
PyObject * libvirt_virNodeDevicePtrWrap(virNodeDevicePtr node);
|
||||||
|
PyObject * libvirt_virSecretPtrWrap(virSecretPtr node);
|
||||||
|
|
||||||
|
|
||||||
/* Provide simple macro statement wrappers (adapted from GLib, in turn from Perl):
|
/* Provide simple macro statement wrappers (adapted from GLib, in turn from Perl):
|
||||||
|
13
types.c
13
types.c
@ -193,6 +193,19 @@ libvirt_virNodeDevicePtrWrap(virNodeDevicePtr node)
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
libvirt_virSecretPtrWrap(virSecretPtr node)
|
||||||
|
{
|
||||||
|
PyObject *ret;
|
||||||
|
|
||||||
|
if (node == NULL) {
|
||||||
|
Py_INCREF(Py_None);
|
||||||
|
return Py_None;
|
||||||
|
}
|
||||||
|
ret = PyCObject_FromVoidPtrAndDesc(node, (char *) "virSecretPtr", NULL);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
libvirt_virEventHandleCallbackWrap(virEventHandleCallback node)
|
libvirt_virEventHandleCallbackWrap(virEventHandleCallback node)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user