
On Fri, Jan 06, 2017 at 04:02:45PM +0100, Michal Privoznik wrote:
On 01/05/2017 02:59 PM, Daniel P. Berrange wrote:
Emit an event whenever a secret value changes
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- daemon/remote.c | 29 ++++++++++++++++++++ include/libvirt/libvirt-secret.h | 1 + src/conf/secret_event.c | 59 ++++++++++++++++++++++++++++++++++++++++ src/conf/secret_event.h | 4 +++ src/libvirt_private.syms | 1 + src/remote/remote_driver.c | 30 ++++++++++++++++++++ src/remote/remote_protocol.x | 13 ++++++++- src/secret/secret_driver.c | 6 ++++ tools/virsh-secret.c | 35 ++++++++++++++++++++++++ 9 files changed, 177 insertions(+), 1 deletion(-)
+ static vshEventCallback vshEventCallbacks[] = { { "lifecycle", VIR_SECRET_EVENT_CALLBACK(vshEventLifecyclePrint), }, + { "value-changed", vshEventGenericPrint, },
We advise users to wrap their callbacks with VIR_SECRET_EVENT_CALLBACK() macro. We should follow our own advices.
The macro casts to virConnectSecretGenericCallback, and vshEventGenericPrint already has that type, so no cast is required here.
};
static const vshCmdInfo info_secret_event[] = {
Also, looks like there's something missing:
object-events/event-test.c:1094:1: note: in expansion of macro 'verify' verify(ARRAY_CARDINALITY(secretEvents) == VIR_SECRET_EVENT_ID_LAST); ^
Opps, yes, I guess I didn't test the examples
Perhaps this?
diff --git i/examples/object-events/event-test.c w/examples/object-events/event-test.c index cf8c1bca2..55c004f93 100644 --- i/examples/object-events/event-test.c +++ w/examples/object-events/event-test.c @@ -763,6 +763,18 @@ mySecretEventCallback(virConnectPtr conn ATTRIBUTE_UNUSED, }
+static int +mySecretEventValueChanged(virConnectPtr conn ATTRIBUTE_UNUSED, + virSecretPtr secret, + void *opaque ATTRIBUTE_UNUSED) +{ + char uuid[VIR_UUID_STRING_BUFLEN]; + virSecretGetUUIDString(secret, uuid); + printf("%s EVENT: Secret %s\n", __func__, uuid); + return 0; +} + + static void eventTypedParamsPrint(virTypedParameterPtr params, int nparams) @@ -1085,6 +1097,7 @@ struct secretEventData {
struct secretEventData secretEvents[] = { SECRET_EVENT(VIR_SECRET_EVENT_ID_LIFECYCLE, mySecretEventCallback), + SECRET_EVENT(VIR_SECRET_EVENT_ID_VALUE_CHANGED, mySecretEventValueChanged), };
/* make sure that the events are kept in sync */
Yep, that looks sane. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|