mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
ch: pass --event-monitor option to cloud-hypervisor
The `--event-monitor` option in cloud-hypervisor outputs events to a specified file. This file can then be used to monitor VM lifecycle, other vmm events and trigger appropriate actions. Signed-off-by: Purna Pavan Chandra Aekkaladevi <paekkaladevi@linux.microsoft.com> Co-authored-by: Vineeth Pillai <viremana@linux.microsoft.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
f044f17825
commit
d7c9660b15
src/ch
@ -541,7 +541,6 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cfg, int logfile)
|
||||
{
|
||||
g_autoptr(virCHMonitor) mon = NULL;
|
||||
g_autoptr(virCommand) cmd = NULL;
|
||||
const char *socketdir = cfg->stateDir;
|
||||
int socket_fd = 0;
|
||||
|
||||
if (virCHMonitorInitialize() < 0)
|
||||
@ -557,11 +556,13 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cfg, int logfile)
|
||||
}
|
||||
|
||||
/* prepare to launch Cloud-Hypervisor socket */
|
||||
mon->socketpath = g_strdup_printf("%s/%s-socket", socketdir, vm->def->name);
|
||||
if (g_mkdir_with_parents(socketdir, 0777) < 0) {
|
||||
mon->socketpath = g_strdup_printf("%s/%s-socket", cfg->stateDir, vm->def->name);
|
||||
mon->eventmonitorpath = g_strdup_printf("%s/%s-event-monitor",
|
||||
cfg->stateDir, vm->def->name);
|
||||
if (g_mkdir_with_parents(cfg->stateDir, 0777) < 0) {
|
||||
virReportSystemError(errno,
|
||||
_("Cannot create socket directory '%1$s'"),
|
||||
socketdir);
|
||||
cfg->stateDir);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -589,6 +590,9 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cfg, int logfile)
|
||||
virCommandAddArgFormat(cmd, "fd=%d", socket_fd);
|
||||
virCommandPassFD(cmd, socket_fd, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
|
||||
|
||||
virCommandAddArg(cmd, "--event-monitor");
|
||||
virCommandAddArgFormat(cmd, "path=%s", mon->eventmonitorpath);
|
||||
|
||||
/* launch Cloud-Hypervisor socket */
|
||||
if (virCommandRunAsync(cmd, &mon->pid) < 0)
|
||||
return NULL;
|
||||
@ -634,6 +638,14 @@ void virCHMonitorClose(virCHMonitor *mon)
|
||||
g_clear_pointer(&mon->socketpath, g_free);
|
||||
}
|
||||
|
||||
if (mon->eventmonitorpath) {
|
||||
if (virFileRemove(mon->eventmonitorpath, -1, -1) < 0) {
|
||||
VIR_WARN("Unable to remove CH event monitor file '%s'",
|
||||
mon->eventmonitorpath);
|
||||
}
|
||||
g_clear_pointer(&mon->eventmonitorpath, g_free);
|
||||
}
|
||||
|
||||
virObjectUnref(mon);
|
||||
}
|
||||
|
||||
|
@ -96,6 +96,8 @@ struct _virCHMonitor {
|
||||
|
||||
char *socketpath;
|
||||
|
||||
char *eventmonitorpath;
|
||||
|
||||
pid_t pid;
|
||||
|
||||
virDomainObj *vm;
|
||||
|
Loading…
x
Reference in New Issue
Block a user