mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
vz: factor out config update flags checks
Actually this is not pure refactoring. Part of common code is replaced with virDomainObjUpdateModificationImpact and this a good replacement. It includes removed check of inactive domain and active flags set. Additionally we resolve current flag in accordance with current state of domain. Thus it becames possible to attach/detach devices for inactive domains if this flag is set. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
This commit is contained in:
parent
1d9d0c9397
commit
3fbb7dba33
@ -1037,6 +1037,28 @@ vzDomainManagedSaveRemove(virDomainPtr domain, unsigned int flags)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int vzCheckConfigUpdateFlags(virDomainObjPtr dom, unsigned int *flags)
|
||||
{
|
||||
if (virDomainObjUpdateModificationImpact(dom, flags) < 0)
|
||||
return -1;
|
||||
|
||||
if (!(*flags & VIR_DOMAIN_AFFECT_CONFIG)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("domain config update needs VIR_DOMAIN_AFFECT_CONFIG "
|
||||
"flag to be set"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virDomainObjIsActive(dom) && !(*flags & VIR_DOMAIN_AFFECT_LIVE)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("Updates on a running domain need "
|
||||
"VIR_DOMAIN_AFFECT_LIVE flag"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vzDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
|
||||
unsigned int flags)
|
||||
{
|
||||
@ -1044,7 +1066,6 @@ static int vzDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
|
||||
vzConnPtr privconn = dom->conn->privateData;
|
||||
virDomainDeviceDefPtr dev = NULL;
|
||||
virDomainObjPtr privdom = NULL;
|
||||
bool domactive = false;
|
||||
|
||||
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
||||
VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||
@ -1052,25 +1073,8 @@ static int vzDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
|
||||
if (!(privdom = vzDomObjFromDomain(dom)))
|
||||
return -1;
|
||||
|
||||
if (!(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("device attach needs VIR_DOMAIN_AFFECT_CONFIG "
|
||||
"flag to be set"));
|
||||
if (vzCheckConfigUpdateFlags(privdom, &flags) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
domactive = virDomainObjIsActive(privdom);
|
||||
if (!domactive && (flags & VIR_DOMAIN_AFFECT_LIVE)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("cannot do live update a device on "
|
||||
"inactive domain"));
|
||||
goto cleanup;
|
||||
}
|
||||
if (domactive && !(flags & VIR_DOMAIN_AFFECT_LIVE)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("Updates on a running domain need "
|
||||
"VIR_DOMAIN_AFFECT_LIVE flag"));
|
||||
}
|
||||
|
||||
dev = virDomainDeviceDefParse(xml, privdom->def, privconn->caps,
|
||||
privconn->xmlopt, VIR_DOMAIN_XML_INACTIVE);
|
||||
@ -1120,7 +1124,6 @@ static int vzDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
|
||||
vzConnPtr privconn = dom->conn->privateData;
|
||||
virDomainDeviceDefPtr dev = NULL;
|
||||
virDomainObjPtr privdom = NULL;
|
||||
bool domactive = false;
|
||||
|
||||
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
||||
VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||
@ -1129,25 +1132,8 @@ static int vzDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
|
||||
if (privdom == NULL)
|
||||
return -1;
|
||||
|
||||
if (!(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("device detach needs VIR_DOMAIN_AFFECT_CONFIG "
|
||||
"flag to be set"));
|
||||
if (vzCheckConfigUpdateFlags(privdom, &flags) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
domactive = virDomainObjIsActive(privdom);
|
||||
if (!domactive && (flags & VIR_DOMAIN_AFFECT_LIVE)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("cannot do live update a device on "
|
||||
"inactive domain"));
|
||||
goto cleanup;
|
||||
}
|
||||
if (domactive && !(flags & VIR_DOMAIN_AFFECT_LIVE)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("Updates on a running domain need "
|
||||
"VIR_DOMAIN_AFFECT_LIVE flag"));
|
||||
}
|
||||
|
||||
dev = virDomainDeviceDefParse(xml, privdom->def, privconn->caps,
|
||||
privconn->xmlopt, VIR_DOMAIN_XML_INACTIVE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user