mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
vz: leverage disks parameters check on disks updates too
This is as easy as moving disks checks from domain post parse callback to device post parse callback. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
This commit is contained in:
parent
307eb644ed
commit
511f6ab5ba
@ -263,9 +263,6 @@ vzDomainDefPostParse(virDomainDefPtr def,
|
|||||||
if (vzDomainDefAddDefaultInputDevices(def) < 0)
|
if (vzDomainDefAddDefaultInputDevices(def) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (vzCheckUnsupportedDisks(def, opaque) < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (vzCheckUnsupportedControllers(def, opaque) < 0)
|
if (vzCheckUnsupportedControllers(def, opaque) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -279,19 +276,18 @@ vzDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
|
|||||||
unsigned int parseFlags ATTRIBUTE_UNUSED,
|
unsigned int parseFlags ATTRIBUTE_UNUSED,
|
||||||
void *opaque ATTRIBUTE_UNUSED)
|
void *opaque ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (dev->type == VIR_DOMAIN_DEVICE_NET &&
|
if (dev->type == VIR_DOMAIN_DEVICE_NET &&
|
||||||
(dev->data.net->type == VIR_DOMAIN_NET_TYPE_NETWORK ||
|
(dev->data.net->type == VIR_DOMAIN_NET_TYPE_NETWORK ||
|
||||||
dev->data.net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) &&
|
dev->data.net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) &&
|
||||||
!dev->data.net->model &&
|
!dev->data.net->model &&
|
||||||
def->os.type == VIR_DOMAIN_OSTYPE_HVM &&
|
def->os.type == VIR_DOMAIN_OSTYPE_HVM &&
|
||||||
VIR_STRDUP(dev->data.net->model, "e1000") < 0)
|
VIR_STRDUP(dev->data.net->model, "e1000") < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
ret = 0;
|
if (dev->type == VIR_DOMAIN_DEVICE_DISK)
|
||||||
cleanup:
|
return vzCheckUnsupportedDisk(def, dev->data.disk, opaque);
|
||||||
return ret;
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -379,51 +379,49 @@ vzCheckDiskUnsupportedParams(virDomainDiskDefPtr disk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
vzCheckUnsupportedDisks(virDomainDefPtr def, vzCapabilitiesPtr vzCaps)
|
vzCheckUnsupportedDisk(const virDomainDef *def,
|
||||||
|
virDomainDiskDefPtr disk,
|
||||||
|
vzCapabilitiesPtr vzCaps)
|
||||||
{
|
{
|
||||||
size_t i, j;
|
size_t i;
|
||||||
virDomainDiskDefPtr disk;
|
|
||||||
virStorageFileFormat diskFormat;
|
virStorageFileFormat diskFormat;
|
||||||
|
|
||||||
for (i = 0; i < def->ndisks; i++) {
|
if (vzCheckDiskUnsupportedParams(disk) < 0)
|
||||||
disk = def->disks[i];
|
return -1;
|
||||||
|
|
||||||
if (vzCheckDiskUnsupportedParams(disk) < 0)
|
if (disk->src->type == VIR_STORAGE_TYPE_FILE) {
|
||||||
return -1;
|
if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
|
||||||
|
if (IS_CT(def))
|
||||||
if (disk->src->type == VIR_STORAGE_TYPE_FILE) {
|
diskFormat = vzCaps->ctDiskFormat;
|
||||||
if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
|
else
|
||||||
if (IS_CT(def))
|
diskFormat = vzCaps->vmDiskFormat;
|
||||||
diskFormat = vzCaps->ctDiskFormat;
|
|
||||||
else
|
|
||||||
diskFormat = vzCaps->vmDiskFormat;
|
|
||||||
} else {
|
|
||||||
diskFormat = VIR_STORAGE_FILE_RAW;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
diskFormat = VIR_STORAGE_FILE_RAW;
|
diskFormat = VIR_STORAGE_FILE_RAW;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
if (virDomainDiskGetFormat(disk) != VIR_STORAGE_FILE_NONE &&
|
diskFormat = VIR_STORAGE_FILE_RAW;
|
||||||
virDomainDiskGetFormat(disk) != diskFormat) {
|
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
_("Unsupported format of disk %s"),
|
|
||||||
disk->src->path);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (j = 0; vzCaps->diskBuses[j] != VIR_DOMAIN_DISK_BUS_LAST; j++) {
|
|
||||||
if (disk->bus == vzCaps->diskBuses[j])
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vzCaps->diskBuses[j] == VIR_DOMAIN_DISK_BUS_LAST) {
|
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
_("Unsupported disk bus type %s"),
|
|
||||||
virDomainDiskBusTypeToString(disk->bus));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (virDomainDiskGetFormat(disk) != VIR_STORAGE_FILE_NONE &&
|
||||||
|
virDomainDiskGetFormat(disk) != diskFormat) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("Unsupported format of disk %s"),
|
||||||
|
disk->src->path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; vzCaps->diskBuses[i] != VIR_DOMAIN_DISK_BUS_LAST; i++) {
|
||||||
|
if (disk->bus == vzCaps->diskBuses[i])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vzCaps->diskBuses[i] == VIR_DOMAIN_DISK_BUS_LAST) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("Unsupported disk bus type %s"),
|
||||||
|
virDomainDiskBusTypeToString(disk->bus));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,8 +121,9 @@ vzNewDomain(vzDriverPtr driver,
|
|||||||
int
|
int
|
||||||
vzInitVersion(vzDriverPtr driver);
|
vzInitVersion(vzDriverPtr driver);
|
||||||
int
|
int
|
||||||
vzCheckUnsupportedDisks(virDomainDefPtr def,
|
vzCheckUnsupportedDisk(const virDomainDef *def,
|
||||||
vzCapabilitiesPtr vzCaps);
|
virDomainDiskDefPtr disk,
|
||||||
|
vzCapabilitiesPtr vzCaps);
|
||||||
int
|
int
|
||||||
vzCheckUnsupportedControllers(virDomainDefPtr def,
|
vzCheckUnsupportedControllers(virDomainDefPtr def,
|
||||||
vzCapabilitiesPtr vzCaps);
|
vzCapabilitiesPtr vzCaps);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user