diff --git a/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml b/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml
index 774324f70..824ddb0f4 100644
--- a/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml
+++ b/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml
@@ -14,9 +14,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml b/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml
index 24d4e19ee..490e5d637 100644
--- a/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml
+++ b/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml
@@ -13,9 +13,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-boot-uefi.xml b/tests/cli-test-xml/compare/virt-install-boot-uefi.xml
index 04efdc7fd..035ec5a31 100644
--- a/tests/cli-test-xml/compare/virt-install-boot-uefi.xml
+++ b/tests/cli-test-xml/compare/virt-install-boot-uefi.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml b/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml
index f070af831..d5c16fca9 100644
--- a/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml
+++ b/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml
@@ -18,9 +18,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml b/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml
index 48197fd3a..9d7b016f8 100644
--- a/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml
+++ b/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml
@@ -19,9 +19,7 @@
-
- Opteron_G4
-
+
@@ -88,9 +86,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-cpu-default-fallback.xml b/tests/cli-test-xml/compare/virt-install-kvm-cpu-default-fallback.xml
new file mode 100644
index 000000000..3001d9661
--- /dev/null
+++ b/tests/cli-test-xml/compare/virt-install-kvm-cpu-default-fallback.xml
@@ -0,0 +1,138 @@
+
+ foobar
+ 00000000-1111-2222-3333-444444444444
+
+
+
+
+
+ 65536
+ 65536
+ 1
+
+ hvm
+
+
+
+
+
+
+
+
+
+ Opteron_G4
+
+
+
+
+
+
+ destroy
+
+
+
+
+
+ /usr/bin/qemu-kvm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /dev/urandom
+
+
+
+
+ foobar
+ 00000000-1111-2222-3333-444444444444
+
+
+
+
+
+ 65536
+ 65536
+ 1
+
+ hvm
+
+
+
+
+
+
+
+
+ Opteron_G4
+
+
+
+
+
+
+
+
+
+
+
+ /usr/bin/qemu-kvm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /dev/urandom
+
+
+
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-rhel5.xml b/tests/cli-test-xml/compare/virt-install-kvm-rhel5.xml
index fce0a67f5..c2659cc4c 100644
--- a/tests/cli-test-xml/compare/virt-install-kvm-rhel5.xml
+++ b/tests/cli-test-xml/compare/virt-install-kvm-rhel5.xml
@@ -19,9 +19,7 @@
-
- Opteron_G4
-
+
@@ -89,9 +87,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml b/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml
index fbc5e73ff..7e1cb4840 100644
--- a/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml
+++ b/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml
@@ -19,9 +19,7 @@
-
- Opteron_G4
-
+
@@ -94,9 +92,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml b/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml
index 3001d9661..537dc57b1 100644
--- a/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml
+++ b/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml
@@ -19,9 +19,7 @@
-
- Opteron_G4
-
+
@@ -88,9 +86,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-session-defaults.xml b/tests/cli-test-xml/compare/virt-install-kvm-session-defaults.xml
index e0779ad27..d1f016a80 100644
--- a/tests/cli-test-xml/compare/virt-install-kvm-session-defaults.xml
+++ b/tests/cli-test-xml/compare/virt-install-kvm-session-defaults.xml
@@ -19,9 +19,7 @@
-
- Opteron_G4
-
+
@@ -93,9 +91,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-win10.xml b/tests/cli-test-xml/compare/virt-install-kvm-win10.xml
index f206283d2..c9609411c 100644
--- a/tests/cli-test-xml/compare/virt-install-kvm-win10.xml
+++ b/tests/cli-test-xml/compare/virt-install-kvm-win10.xml
@@ -24,9 +24,7 @@
-
- Opteron_G4
-
+
@@ -98,9 +96,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml b/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml
index cc2b7f27e..942035556 100644
--- a/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml
+++ b/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml
@@ -24,9 +24,7 @@
-
- Opteron_G4
-
+
@@ -98,9 +96,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-location-iso.xml b/tests/cli-test-xml/compare/virt-install-location-iso.xml
index 5e91a06b8..8162e4e9a 100644
--- a/tests/cli-test-xml/compare/virt-install-location-iso.xml
+++ b/tests/cli-test-xml/compare/virt-install-location-iso.xml
@@ -14,9 +14,7 @@
-
- Opteron_G4
-
+
@@ -76,9 +74,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-q35-defaults.xml b/tests/cli-test-xml/compare/virt-install-q35-defaults.xml
index b0f508170..2135ad714 100644
--- a/tests/cli-test-xml/compare/virt-install-q35-defaults.xml
+++ b/tests/cli-test-xml/compare/virt-install-q35-defaults.xml
@@ -14,9 +14,7 @@
-
- Opteron_G4
-
+
@@ -86,9 +84,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-solaris10-defaults.xml b/tests/cli-test-xml/compare/virt-install-solaris10-defaults.xml
index 488756b03..510385eae 100644
--- a/tests/cli-test-xml/compare/virt-install-solaris10-defaults.xml
+++ b/tests/cli-test-xml/compare/virt-install-solaris10-defaults.xml
@@ -18,8 +18,7 @@
-
- Opteron_G4
+
diff --git a/tests/cli-test-xml/compare/virt-install-spice-gl.xml b/tests/cli-test-xml/compare/virt-install-spice-gl.xml
index e98eddebc..ba3794956 100644
--- a/tests/cli-test-xml/compare/virt-install-spice-gl.xml
+++ b/tests/cli-test-xml/compare/virt-install-spice-gl.xml
@@ -18,9 +18,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/cli-test-xml/compare/virt-install-win7-uefi.xml b/tests/cli-test-xml/compare/virt-install-win7-uefi.xml
index b6536e42b..de66eb10a 100644
--- a/tests/cli-test-xml/compare/virt-install-win7-uefi.xml
+++ b/tests/cli-test-xml/compare/virt-install-win7-uefi.xml
@@ -21,9 +21,7 @@
-
- Opteron_G4
-
+
@@ -100,9 +98,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/clitest.py b/tests/clitest.py
index e567f9859..22d7c5d95 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -716,6 +716,7 @@ c.add_compare("--disk none --location %(EXISTIMG3)s --nonetworks", "location-iso
c.add_compare("--disk %(EXISTIMG1)s --pxe --os-variant rhel5.4", "kvm-rhel5") # RHEL5 defaults
c.add_compare("--disk %(EXISTIMG1)s --pxe --os-variant rhel6.4", "kvm-rhel6") # RHEL6 defaults
c.add_compare("--disk %(EXISTIMG1)s --pxe --os-variant rhel7.0", "kvm-rhel7", skip_check=OLD_OSINFO) # RHEL7 defaults
+c.add_compare("--connect " + utils.URIs.kvm_nodomcaps + " --disk %(EXISTIMG1)s --pxe --os-variant rhel7.0", "kvm-cpu-default-fallback", skip_check=OLD_OSINFO) # No domcaps, so mode=host-model isn't safe, so we fallback to host-model-only
c.add_compare("--disk %(EXISTIMG1)s --pxe --os-variant centos7.0", "kvm-centos7", skip_check=OLD_OSINFO) # Centos 7 defaults
c.add_compare("--disk %(EXISTIMG1)s --cdrom %(EXISTIMG2)s --os-variant win10", "kvm-win10", skip_check=OLD_OSINFO) # win10 defaults
c.add_compare("--os-variant win7 --cdrom %(EXISTIMG2)s --boot loader_type=pflash,loader=CODE.fd,nvram_template=VARS.fd --disk %(EXISTIMG1)s", "win7-uefi") # no HYPER-V with UEFI
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt
index 1cbba2589..ab739dee1 100644
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt
@@ -13,9 +13,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt
index 6db070359..ef988a622 100644
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt
@@ -14,9 +14,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2 b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2
index 727c11407..b8b0a1dcc 100644
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2
@@ -14,9 +14,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt
index be0fa10ff..90eaf5ea7 100644
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt
@@ -14,9 +14,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt
index f02a65b79..ac5c9eadb 100644
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt
@@ -13,9 +13,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt.disk_raw b/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt.disk_raw
index 5ae93322d..4d4dc838f 100644
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt.disk_raw
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt.disk_raw
@@ -13,9 +13,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt
index 153c6490d..745b100db 100644
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt
@@ -13,9 +13,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt
index fc80997c1..bf6c7456b 100644
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt
@@ -13,9 +13,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt
index 4abfc0579..e9d30f852 100644
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt
@@ -13,9 +13,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw
index 4ea7d80ee..0a4a277ff 100644
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw
@@ -13,9 +13,7 @@
-
- Opteron_G4
-
+
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt
index b431cd968..600bcb826 100644
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt
@@ -13,9 +13,7 @@
-
- Opteron_G4
-
+
diff --git a/virtinst/domain/cpu.py b/virtinst/domain/cpu.py
index 799485f82..8e36cf545 100644
--- a/virtinst/domain/cpu.py
+++ b/virtinst/domain/cpu.py
@@ -73,9 +73,11 @@ class DomainCpu(XMLBuilder):
SPECIAL_MODE_HOST_MODEL = "host-model"
SPECIAL_MODE_HOST_PASSTHROUGH = "host-passthrough"
SPECIAL_MODE_CLEAR = "clear"
+ SPECIAL_MODE_APP_DEFAULT = "default"
SPECIAL_MODES = [SPECIAL_MODE_HOST_MODEL_ONLY, SPECIAL_MODE_HV_DEFAULT,
SPECIAL_MODE_HOST_COPY, SPECIAL_MODE_HOST_MODEL,
- SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_CLEAR]
+ SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_CLEAR,
+ SPECIAL_MODE_APP_DEFAULT]
def set_special_mode(self, val):
if (val == self.SPECIAL_MODE_HOST_MODEL or
val == self.SPECIAL_MODE_HOST_PASSTHROUGH):
@@ -231,6 +233,14 @@ class DomainCpu(XMLBuilder):
return
mode = guest.x86_cpu_default
+ if mode == self.SPECIAL_MODE_APP_DEFAULT:
+ # If libvirt is new enough to support reliable mode=host-model
+ # then use it, otherwise use previous default HOST_MODEL_ONLY
+ domcaps = guest.lookup_domcaps()
+ mode = self.SPECIAL_MODE_HOST_MODEL_ONLY
+ if domcaps.supports_safe_host_model():
+ mode = self.SPECIAL_MODE_HOST_MODEL
+
self.set_special_mode(mode)
if mode == self.SPECIAL_MODE_HOST_MODEL_ONLY:
self._validate_default_host_model_only(guest)
diff --git a/virtinst/domcapabilities.py b/virtinst/domcapabilities.py
index 9ef3853e3..b49e1498a 100644
--- a/virtinst/domcapabilities.py
+++ b/virtinst/domcapabilities.py
@@ -100,6 +100,7 @@ class _CPUModel(XMLBuilder):
class _CPUMode(XMLBuilder):
XML_NAME = "mode"
name = XMLProperty("./@name")
+ supported = XMLProperty("./@supported", is_yesno=True)
models = XMLChildProperty(_CPUModel)
def get_model(self, name):
@@ -212,6 +213,15 @@ class DomainCapabilities(XMLBuilder):
return ("readonly" in self.os.loader.enum_names() and
"yes" in self.os.loader.get_enum("readonly").get_values())
+ def supports_safe_host_model(self):
+ """
+ Return True if domcaps reports support for cpu mode=host-model.
+ host-model infact predates this support, however it wasn't
+ general purpose safe prior to domcaps advertisement
+ """
+ return [(m.name == "host-model" and m.supported)
+ for m in self.cpu.modes]
+
XML_NAME = "domainCapabilities"
os = XMLChildProperty(_OS, is_single=True)
diff --git a/virtinst/guest.py b/virtinst/guest.py
index 21a44030e..c1f71b9d9 100644
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -161,7 +161,7 @@ class Guest(XMLBuilder):
self.skip_default_usbredir = False
self.skip_default_graphics = False
self.skip_default_rng = False
- self.x86_cpu_default = self.cpu.SPECIAL_MODE_HOST_MODEL_ONLY
+ self.x86_cpu_default = self.cpu.SPECIAL_MODE_APP_DEFAULT
self.__osinfo = None
self._capsinfo = None