mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
undefine: Implement internal API for qemu driver
* src/qemu/qemu_driver.c: New call back for qemu_driver, New function qemudDomainUndefineFlags, and changes on qemudDomainUndefine.
This commit is contained in:
parent
0f8552a2fb
commit
ae8e08aa28
@ -4311,12 +4311,18 @@ cleanup:
|
|||||||
return dom;
|
return dom;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qemudDomainUndefine(virDomainPtr dom) {
|
static int
|
||||||
|
qemuDomainUndefineFlags(virDomainPtr dom,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
struct qemud_driver *driver = dom->conn->privateData;
|
struct qemud_driver *driver = dom->conn->privateData;
|
||||||
virDomainObjPtr vm;
|
virDomainObjPtr vm;
|
||||||
virDomainEventPtr event = NULL;
|
virDomainEventPtr event = NULL;
|
||||||
|
char *name = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
|
virCheckFlags(VIR_DOMAIN_UNDEFINE_MANAGED_SAVE, -1);
|
||||||
|
|
||||||
qemuDriverLock(driver);
|
qemuDriverLock(driver);
|
||||||
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
||||||
|
|
||||||
@ -4340,6 +4346,26 @@ static int qemudDomainUndefine(virDomainPtr dom) {
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
name = qemuDomainManagedSavePath(driver, vm);
|
||||||
|
if (name == NULL)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (virFileExists(name)) {
|
||||||
|
if (flags & VIR_DOMAIN_UNDEFINE_MANAGED_SAVE) {
|
||||||
|
if (unlink(name) < 0) {
|
||||||
|
qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
_("Failed to remove domain managed "
|
||||||
|
"save image"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||||
|
_("Refusing to undefine while domain managed "
|
||||||
|
"save image exists"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (virDomainDeleteConfig(driver->configDir, driver->autostartDir, vm) < 0)
|
if (virDomainDeleteConfig(driver->configDir, driver->autostartDir, vm) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
@ -4354,6 +4380,7 @@ static int qemudDomainUndefine(virDomainPtr dom) {
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
VIR_FREE(name);
|
||||||
if (vm)
|
if (vm)
|
||||||
virDomainObjUnlock(vm);
|
virDomainObjUnlock(vm);
|
||||||
if (event)
|
if (event)
|
||||||
@ -4362,6 +4389,12 @@ cleanup:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemudDomainUndefine(virDomainPtr dom)
|
||||||
|
{
|
||||||
|
return qemuDomainUndefineFlags(dom, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuDomainAttachDeviceDiskLive(struct qemud_driver *driver,
|
qemuDomainAttachDeviceDiskLive(struct qemud_driver *driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
@ -8553,6 +8586,7 @@ static virDriver qemuDriver = {
|
|||||||
.domainCreateWithFlags = qemudDomainStartWithFlags, /* 0.8.2 */
|
.domainCreateWithFlags = qemudDomainStartWithFlags, /* 0.8.2 */
|
||||||
.domainDefineXML = qemudDomainDefine, /* 0.2.0 */
|
.domainDefineXML = qemudDomainDefine, /* 0.2.0 */
|
||||||
.domainUndefine = qemudDomainUndefine, /* 0.2.0 */
|
.domainUndefine = qemudDomainUndefine, /* 0.2.0 */
|
||||||
|
.domainUndefineFlags = qemuDomainUndefineFlags, /* 0.9.4 */
|
||||||
.domainAttachDevice = qemuDomainAttachDevice, /* 0.4.1 */
|
.domainAttachDevice = qemuDomainAttachDevice, /* 0.4.1 */
|
||||||
.domainAttachDeviceFlags = qemuDomainAttachDeviceFlags, /* 0.7.7 */
|
.domainAttachDeviceFlags = qemuDomainAttachDeviceFlags, /* 0.7.7 */
|
||||||
.domainDetachDevice = qemuDomainDetachDevice, /* 0.5.0 */
|
.domainDetachDevice = qemuDomainDetachDevice, /* 0.5.0 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user