mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-10 14:57:42 +00:00
qemu: check os type / virt type / arch in validate callback
Don't check os type / virt type / arch in the post-parse callback because we can't assume qemuCaps is non-NULL at this point. It also conceptually belongs to the validation callback. Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
62e4a75ef4
commit
87a8b81d40
@ -4864,27 +4864,6 @@ qemuDomainDefPostParse(virDomainDefPtr def,
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (def->os.type != VIR_DOMAIN_OSTYPE_HVM) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Emulator '%s' does not support os type '%s'"),
|
||||
def->emulator, virDomainOSTypeToString(def->os.type));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!virQEMUCapsIsArchSupported(qemuCaps, def->os.arch)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Emulator '%s' does not support arch '%s'"),
|
||||
def->emulator, virArchToString(def->os.arch));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!virQEMUCapsIsVirtTypeSupported(qemuCaps, def->virtType)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Emulator '%s' does not support virt type '%s'"),
|
||||
def->emulator, virDomainVirtTypeToString(def->virtType));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (def->os.bootloader || def->os.bootloaderArgs) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("bootloader is not supported by QEMU"));
|
||||
@ -5141,6 +5120,27 @@ qemuDomainDefValidate(const virDomainDef *def,
|
||||
def->emulator)))
|
||||
goto cleanup;
|
||||
|
||||
if (def->os.type != VIR_DOMAIN_OSTYPE_HVM) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Emulator '%s' does not support os type '%s'"),
|
||||
def->emulator, virDomainOSTypeToString(def->os.type));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!virQEMUCapsIsArchSupported(qemuCaps, def->os.arch)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Emulator '%s' does not support arch '%s'"),
|
||||
def->emulator, virArchToString(def->os.arch));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!virQEMUCapsIsVirtTypeSupported(qemuCaps, def->virtType)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Emulator '%s' does not support virt type '%s'"),
|
||||
def->emulator, virDomainVirtTypeToString(def->virtType));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (def->mem.min_guarantee) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("Parameter 'min_guarantee' not supported by QEMU."));
|
||||
|
@ -2852,10 +2852,13 @@ mymain(void)
|
||||
QEMU_CAPS_NEC_USB_XHCI);
|
||||
|
||||
/* VM XML has invalid arch/ostype/virttype combo, but the SKIP flag
|
||||
* will avoid the error. Still, we expect qemu driver to complain about
|
||||
* missing machine error, and not crash */
|
||||
* will avoid the error during parse. This will cause us to fill in
|
||||
* the missing machine type using the i386 binary, despite it being
|
||||
* the wrong binary for the arch. We expect to get a failure about
|
||||
* bad arch later when creating the pretend command.
|
||||
*/
|
||||
DO_TEST_FULL("missing-machine",
|
||||
ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,
|
||||
ARG_FLAGS, FLAG_EXPECT_FAILURE,
|
||||
ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
|
||||
ARG_QEMU_CAPS, NONE);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user