From: Michal Privoznik <mprivozn@redhat.com>
We already have a thread that listens on cloud-hypervisor's
monitor for incoming events and processes them. What is missing
though, is emitting of corresponding lifecycle events.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
src/ch/ch_events.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/src/ch/ch_events.c b/src/ch/ch_events.c
index cd2f92a493..5125f26912 100644
--- a/src/ch/ch_events.c
+++ b/src/ch/ch_events.c
@@ -25,6 +25,7 @@
#include "ch_domain.h"
#include "ch_events.h"
#include "ch_process.h"
+#include "domain_event.h"
#include "virfile.h"
#include "virlog.h"
@@ -65,6 +66,58 @@ virCHEventStopProcess(virDomainObj *vm,
return 0;
}
+
+static void
+virCHProcessEmitEvent(virDomainObj *vm,
+ virCHEvent ev)
+{
+ virCHDriver *driver = CH_DOMAIN_PRIVATE(vm)->driver;
+ virObjectEvent *event = NULL;
+
+ switch (ev) {
+ case VIR_CH_EVENT_VM_BOOTED:
+ event = virDomainEventLifecycleNewFromObj(vm,
+ VIR_DOMAIN_EVENT_STARTED,
+ VIR_DOMAIN_EVENT_STARTED_BOOTED);
+ break;
+ case VIR_CH_EVENT_VM_PAUSED:
+ event = virDomainEventLifecycleNewFromObj(vm,
+ VIR_DOMAIN_EVENT_SUSPENDED,
+ VIR_DOMAIN_EVENT_SUSPENDED_PAUSED);
+ break;
+ case VIR_CH_EVENT_VM_RESUMED:
+ event = virDomainEventLifecycleNewFromObj(vm,
+ VIR_DOMAIN_EVENT_RESUMED,
+ VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
+ break;
+ case VIR_CH_EVENT_VM_REBOOTED:
+ event = virDomainEventRebootNewFromObj(vm);
+ break;
+ case VIR_CH_EVENT_VMM_SHUTDOWN:
+ case VIR_CH_EVENT_VM_SHUTDOWN:
+ event = virDomainEventLifecycleNewFromObj(vm,
+ VIR_DOMAIN_EVENT_SHUTDOWN,
+ VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED);
+ break;
+ case VIR_CH_EVENT_VMM_STARTING:
+ case VIR_CH_EVENT_VM_BOOTING:
+ case VIR_CH_EVENT_VM_REBOOTING:
+ case VIR_CH_EVENT_VM_DELETED:
+ case VIR_CH_EVENT_VM_PAUSING:
+ case VIR_CH_EVENT_VM_RESUMING:
+ case VIR_CH_EVENT_VM_SNAPSHOTTING:
+ case VIR_CH_EVENT_VM_SNAPSHOTTED:
+ case VIR_CH_EVENT_VM_RESTORING:
+ case VIR_CH_EVENT_VM_RESTORED:
+ case VIR_CH_EVENT_LAST:
+ default:
+ break;
+ }
+
+ virObjectEventStateQueue(driver->domainEventState, event);
+}
+
+
static int
virCHProcessEvent(virCHMonitor *mon,
virJSONValue *eventJSON)
@@ -91,6 +144,8 @@ virCHProcessEvent(virCHMonitor *mon,
ev = virCHEventTypeFromString(full_event);
VIR_DEBUG("%s: Source: %s, Event: %s, ev: %d", vm->def->name, source, event, ev);
+ virCHProcessEmitEvent(vm, ev);
+
switch (ev) {
case VIR_CH_EVENT_VMM_STARTING:
case VIR_CH_EVENT_VM_BOOTING:
--
2.49.1