[libvirt] Access to the secretDriver in a storage backend?

Hi, I'm working on a storage backend for libvirt which needs credentials to access the storage pool. I want to use the build in secret manager from libvirt, but it seems I do not have access to the secretDriver in a storage backend? static int virStorageBackendRBDRefreshPool(virConnectPtr conn ATTRIBUTE_UNUSED, virStoragePoolObjPtr pool) { if (pool->def->source.auth.cephx.secret != NULL) { virSecretPtr secret; secret = conn->secretDriver->lookupByUUID(conn, pool->def->source.auth.cephx.secret); virSecretFree(secret); } return 0; } It goes wrong at this point: conn->secretDriver->lookupByUUID(conn,pool->def->source.auth.cephx.secret); "error: dereferencing pointer to incomplete type" Is the secretDriver available in a storage backend? In storage_backend.c I see that it should be available, correct? I might be missing something here, so that's why I'm asking it here. Thank you, Wido

On Sat, Dec 31, 2011 at 01:26:54PM +0100, Wido den Hollander wrote:
Hi,
I'm working on a storage backend for libvirt which needs credentials to access the storage pool. I want to use the build in secret manager from libvirt, but it seems I do not have access to the secretDriver in a storage backend?
static int virStorageBackendRBDRefreshPool(virConnectPtr conn ATTRIBUTE_UNUSED, virStoragePoolObjPtr pool) {
if (pool->def->source.auth.cephx.secret != NULL) { virSecretPtr secret; secret = conn->secretDriver->lookupByUUID(conn, pool->def->source.auth.cephx.secret); virSecretFree(secret); }
return 0; }
It goes wrong at this point: conn->secretDriver->lookupByUUID(conn,pool->def->source.auth.cephx.secret);
"error: dereferencing pointer to incomplete type"
Is the secretDriver available in a storage backend? In storage_backend.c I see that it should be available, correct?
Are you missing the '#include "datatypes.h"' header ? Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On 01/03/2012 12:58 PM, Daniel P. Berrange wrote:
On Sat, Dec 31, 2011 at 01:26:54PM +0100, Wido den Hollander wrote:
Hi,
I'm working on a storage backend for libvirt which needs credentials to access the storage pool. I want to use the build in secret manager from libvirt, but it seems I do not have access to the secretDriver in a storage backend?
static int virStorageBackendRBDRefreshPool(virConnectPtr conn ATTRIBUTE_UNUSED, virStoragePoolObjPtr pool) {
if (pool->def->source.auth.cephx.secret != NULL) { virSecretPtr secret; secret = conn->secretDriver->lookupByUUID(conn, pool->def->source.auth.cephx.secret); virSecretFree(secret); }
return 0; }
It goes wrong at this point: conn->secretDriver->lookupByUUID(conn,pool->def->source.auth.cephx.secret);
"error: dereferencing pointer to incomplete type"
Is the secretDriver available in a storage backend? In storage_backend.c I see that it should be available, correct?
Are you missing the '#include "datatypes.h"' header ?
Yes, that was indeed the fix. Although, in the meantime I found: virSecretPtr secret; secret = virSecretLookupByUUIDString(conn, pool->def->source.auth.cephx.secret); value = virSecretGetValue(secret, &value_size, 0); This also works fine, but what do you recommend? Wido
Daniel

On Tue, Jan 03, 2012 at 03:00:49PM +0100, Wido den Hollander wrote:
On 01/03/2012 12:58 PM, Daniel P. Berrange wrote:
On Sat, Dec 31, 2011 at 01:26:54PM +0100, Wido den Hollander wrote:
Hi,
I'm working on a storage backend for libvirt which needs credentials to access the storage pool. I want to use the build in secret manager from libvirt, but it seems I do not have access to the secretDriver in a storage backend?
static int virStorageBackendRBDRefreshPool(virConnectPtr conn ATTRIBUTE_UNUSED, virStoragePoolObjPtr pool) {
if (pool->def->source.auth.cephx.secret != NULL) { virSecretPtr secret; secret = conn->secretDriver->lookupByUUID(conn, pool->def->source.auth.cephx.secret); virSecretFree(secret); }
return 0; }
It goes wrong at this point: conn->secretDriver->lookupByUUID(conn,pool->def->source.auth.cephx.secret);
"error: dereferencing pointer to incomplete type"
Is the secretDriver available in a storage backend? In storage_backend.c I see that it should be available, correct?
Are you missing the '#include "datatypes.h"' header ?
Yes, that was indeed the fix.
Although, in the meantime I found:
virSecretPtr secret; secret = virSecretLookupByUUIDString(conn, pool->def->source.auth.cephx.secret);
value = virSecretGetValue(secret, &value_size, 0);
This also works fine, but what do you recommend?
Either is fine. Perhaps a slight preference to use the style you were trying out originally. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
participants (2)
-
Daniel P. Berrange
-
Wido den Hollander