mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-02 04:15:46 +00:00
bhyve: Feed hook scripts with domain XML
Domain related hook scripts are all fed with domain XML on their stdin, except for bhyve. Fix this. Resolves: https://gitlab.com/libvirt/libvirt/-/issues/528 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
4e73f50b1e
commit
ad8c4d9d6d
@ -92,9 +92,9 @@ Script arguments
|
|||||||
The hook scripts are called with specific command line arguments, depending upon
|
The hook scripts are called with specific command line arguments, depending upon
|
||||||
the script, and the operation being performed.
|
the script, and the operation being performed.
|
||||||
|
|
||||||
The guest hook scripts, qemu, lxc and libxl are also given the **full** XML
|
The guest hook scripts, qemu, lxc, libxl and bhyve are also given the **full**
|
||||||
description for the domain on their stdin. This includes items such the UUID of
|
XML description for the domain on their stdin. This includes items such the UUID
|
||||||
the domain and its storage information, and is intended to provide all the
|
of the domain and its storage information, and is intended to provide all the
|
||||||
libvirt information the script needs.
|
libvirt information the script needs.
|
||||||
|
|
||||||
For all cases, stdin of the network hook script is provided with the full XML
|
For all cases, stdin of the network hook script is provided with the full XML
|
||||||
@ -129,8 +129,8 @@ followed with the full XML description of the port:
|
|||||||
</hookData>
|
</hookData>
|
||||||
|
|
||||||
Please note that this approach is different from other cases such as ``daemon``,
|
Please note that this approach is different from other cases such as ``daemon``,
|
||||||
``qemu``, ``lxc`` or ``libxl`` hook scripts, because two XMLs may be passed
|
``qemu``, ``lxc``, ``libxl`` or ``bhyve`` hook scripts, because two XMLs may be
|
||||||
here, while in the other cases only a single XML is passed.
|
passed here, while in the other cases only a single XML is passed.
|
||||||
|
|
||||||
The command line arguments take this approach:
|
The command line arguments take this approach:
|
||||||
|
|
||||||
|
@ -94,21 +94,34 @@ virBhyveFormatDevMapFile(const char *vm_name, char **fn_out)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bhyveProcessStartHook(virDomainObj *vm, virHookBhyveOpType op)
|
bhyveProcessStartHook(struct _bhyveConn *driver,
|
||||||
|
virDomainObj *vm,
|
||||||
|
virHookBhyveOpType op)
|
||||||
{
|
{
|
||||||
|
g_autofree char *xml = NULL;
|
||||||
|
|
||||||
if (!virHookPresent(VIR_HOOK_DRIVER_BHYVE))
|
if (!virHookPresent(VIR_HOOK_DRIVER_BHYVE))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
xml = virDomainDefFormat(vm->def, driver->xmlopt, 0);
|
||||||
|
|
||||||
return virHookCall(VIR_HOOK_DRIVER_BHYVE, vm->def->name, op,
|
return virHookCall(VIR_HOOK_DRIVER_BHYVE, vm->def->name, op,
|
||||||
VIR_HOOK_SUBOP_BEGIN, NULL, NULL, NULL);
|
VIR_HOOK_SUBOP_BEGIN, NULL, xml, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bhyveProcessStopHook(virDomainObj *vm, virHookBhyveOpType op)
|
bhyveProcessStopHook(struct _bhyveConn *driver,
|
||||||
|
virDomainObj *vm,
|
||||||
|
virHookBhyveOpType op)
|
||||||
{
|
{
|
||||||
if (virHookPresent(VIR_HOOK_DRIVER_BHYVE))
|
g_autofree char *xml = NULL;
|
||||||
virHookCall(VIR_HOOK_DRIVER_BHYVE, vm->def->name, op,
|
if (!virHookPresent(VIR_HOOK_DRIVER_BHYVE))
|
||||||
VIR_HOOK_SUBOP_END, NULL, NULL, NULL);
|
return;
|
||||||
|
|
||||||
|
xml = virDomainDefFormat(vm->def, driver->xmlopt, 0);
|
||||||
|
|
||||||
|
virHookCall(VIR_HOOK_DRIVER_BHYVE, vm->def->name, op,
|
||||||
|
VIR_HOOK_SUBOP_END, NULL, xml, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -194,7 +207,7 @@ virBhyveProcessStartImpl(struct _bhyveConn *driver,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bhyveProcessStartHook(vm, VIR_HOOK_BHYVE_OP_START) < 0)
|
if (bhyveProcessStartHook(driver, vm, VIR_HOOK_BHYVE_OP_START) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* Now we can start the domain */
|
/* Now we can start the domain */
|
||||||
@ -216,7 +229,7 @@ virBhyveProcessStartImpl(struct _bhyveConn *driver,
|
|||||||
BHYVE_STATE_DIR) < 0)
|
BHYVE_STATE_DIR) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (bhyveProcessStartHook(vm, VIR_HOOK_BHYVE_OP_STARTED) < 0)
|
if (bhyveProcessStartHook(driver, vm, VIR_HOOK_BHYVE_OP_STARTED) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@ -265,7 +278,7 @@ virBhyveProcessStart(virConnectPtr conn,
|
|||||||
struct _bhyveConn *driver = conn->privateData;
|
struct _bhyveConn *driver = conn->privateData;
|
||||||
|
|
||||||
/* Run an early hook to setup missing devices. */
|
/* Run an early hook to setup missing devices. */
|
||||||
if (bhyveProcessStartHook(vm, VIR_HOOK_BHYVE_OP_PREPARE) < 0)
|
if (bhyveProcessStartHook(driver, vm, VIR_HOOK_BHYVE_OP_PREPARE) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (flags & VIR_BHYVE_PROCESS_START_AUTODESTROY)
|
if (flags & VIR_BHYVE_PROCESS_START_AUTODESTROY)
|
||||||
@ -307,7 +320,7 @@ virBhyveProcessStop(struct _bhyveConn *driver,
|
|||||||
if ((priv != NULL) && (priv->mon != NULL))
|
if ((priv != NULL) && (priv->mon != NULL))
|
||||||
bhyveMonitorClose(priv->mon);
|
bhyveMonitorClose(priv->mon);
|
||||||
|
|
||||||
bhyveProcessStopHook(vm, VIR_HOOK_BHYVE_OP_STOPPED);
|
bhyveProcessStopHook(driver, vm, VIR_HOOK_BHYVE_OP_STOPPED);
|
||||||
|
|
||||||
/* Cleanup network interfaces */
|
/* Cleanup network interfaces */
|
||||||
bhyveNetCleanup(vm);
|
bhyveNetCleanup(vm);
|
||||||
@ -329,7 +342,7 @@ virBhyveProcessStop(struct _bhyveConn *driver,
|
|||||||
vm->pid = 0;
|
vm->pid = 0;
|
||||||
vm->def->id = -1;
|
vm->def->id = -1;
|
||||||
|
|
||||||
bhyveProcessStopHook(vm, VIR_HOOK_BHYVE_OP_RELEASE);
|
bhyveProcessStopHook(driver, vm, VIR_HOOK_BHYVE_OP_RELEASE);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virPidFileDelete(BHYVE_STATE_DIR, vm->def->name);
|
virPidFileDelete(BHYVE_STATE_DIR, vm->def->name);
|
||||||
|
Loading…
Reference in New Issue
Block a user