From 7ee2563aed9ccc2db208c218614f2c1d83b39c00 Mon Sep 17 00:00:00 2001 From: Javier Pena Date: Wed, 14 Dec 2016 10:04:07 +0100 Subject: [PATCH] Set cpu_mode to "none" when virt_type is qemu The Nova code states that the default value for cpu_mode when using qemu as virt_type should be host-model [1]. However, this is not actually tested in the gate due to [2], and with QEMU 2.6.0 it is known to cause issues [3], because there is a chance a new CPU flag is used, but not emulated by QEMU TCG code. Setting cpu_mode to "none" in this case as default would prevent us from hitting issues when this code is most exercised, i.e. CI environments. [1] https://github.com/openstack/nova/blob/f419825c216bccd9f7023deec024099c5b65428d/nova/conf/libvirt.py#L442-L448 [2] https://github.com/openstack-dev/devstack/blob/master/lib/nova_plugins/hypervisor-libvirt#L42 [3] https://bugzilla.redhat.com/show_bug.cgi?id=1404627 Depends-On: I687bc765b77638096b47f823e3a784ce7c8c120f Change-Id: Ic95755a927eef0580433cd5c8eca1c4c7cad2f69 --- manifests/compute/libvirt.pp | 6 +++--- ...or-virt_type=qemu-is-now-none-da2f1ada88d6d2c0.yaml | 10 ++++++++++ spec/acceptance/nova_wsgi_apache_spec.rb | 6 ++++++ spec/classes/nova_compute_libvirt_spec.rb | 8 ++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 releasenotes/notes/cpu_mode-for-virt_type=qemu-is-now-none-da2f1ada88d6d2c0.yaml diff --git a/manifests/compute/libvirt.pp b/manifests/compute/libvirt.pp index ba28c0a96..6f345d117 100644 --- a/manifests/compute/libvirt.pp +++ b/manifests/compute/libvirt.pp @@ -24,8 +24,8 @@ # [*libvirt_cpu_mode*] # (optional) The libvirt CPU mode to configure. Possible values # include custom, host-model, none, host-passthrough. -# Defaults to 'host-model' if libvirt_virt_type is set to either -# kvm or qemu, otherwise defaults to 'none'. +# Defaults to 'host-model' if libvirt_virt_type is set to kvm, +# otherwise defaults to 'none'. # # [*libvirt_cpu_model*] # (optional) The named libvirt CPU model (see names listed in @@ -132,7 +132,7 @@ class nova::compute::libvirt ( # libvirt_cpu_mode has different defaults depending on hypervisor. if !$libvirt_cpu_mode { case $libvirt_virt_type { - 'kvm','qemu': { + 'kvm': { $libvirt_cpu_mode_real = 'host-model' } default: { diff --git a/releasenotes/notes/cpu_mode-for-virt_type=qemu-is-now-none-da2f1ada88d6d2c0.yaml b/releasenotes/notes/cpu_mode-for-virt_type=qemu-is-now-none-da2f1ada88d6d2c0.yaml new file mode 100644 index 000000000..5b5dfb8a7 --- /dev/null +++ b/releasenotes/notes/cpu_mode-for-virt_type=qemu-is-now-none-da2f1ada88d6d2c0.yaml @@ -0,0 +1,10 @@ +--- +upgrade: + - The default value for nova::compute::libvirt::libvirt_cpu_mode + when nova::compute::libvirt::libvirt_virt_type is set to 'qemu' + has been changed from 'host-model' to 'none'. The Nova gate + does not really test the 'host-model' option in their CI, but + 'none' due to Devstack configuration, and it is known to create + issues with QEMU 2.6 (see + https://bugzilla.redhat.com/show_bug.cgi?id=1404627). + diff --git a/spec/acceptance/nova_wsgi_apache_spec.rb b/spec/acceptance/nova_wsgi_apache_spec.rb index a5c1dd090..68d3834ab 100644 --- a/spec/acceptance/nova_wsgi_apache_spec.rb +++ b/spec/acceptance/nova_wsgi_apache_spec.rb @@ -71,6 +71,12 @@ describe 'basic nova' do virtlock_service_name => false, virtlog_service_name => false, } + # FIXME(jpena): this is only here to avoid an attempted downgrade + # of qemu-kvm-ev. Remove after https://review.openstack.org/411179 + # is merged + if $::osfamily == 'RedHat' { + Package['qemu-kvm-ev'] -> Class['nova::compute::libvirt::services'] + } class { '::nova::scheduler': } class { '::nova::vncproxy': } diff --git a/spec/classes/nova_compute_libvirt_spec.rb b/spec/classes/nova_compute_libvirt_spec.rb index 1e6b2d77f..f48b82dee 100644 --- a/spec/classes/nova_compute_libvirt_spec.rb +++ b/spec/classes/nova_compute_libvirt_spec.rb @@ -123,6 +123,14 @@ describe 'nova::compute::libvirt' do it { is_expected.to contain_nova_config('libvirt/cpu_model').with_value('kvm64')} end + describe 'with qemu as virt_type' do + let :params do + { :libvirt_virt_type => 'qemu' } + end + + it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('none')} + end + describe 'with migration_support enabled' do context 'with vncserver_listen set to 0.0.0.0' do