Handle libvirt/cpu_model_extra_flags option

This allows for specifying granular CPU feature flags when specifying
CPU models.
It should be set only if 'cpu_mode' and 'cpu_model' attributes are set
and cpu_mode attribute value is set to "custom".

NOTE: The related nova changes are done in change:
I6bb956808aa3df58747c865c92e5b276e61aff44

Change-Id: Id4f2cad2e0b0c34a7a68d0b3a6f69b44816f4cd9
This commit is contained in:
Rajesh Tailor 2018-04-11 17:11:15 +05:30
parent e9aa809dd3
commit c12e358028
3 changed files with 32 additions and 2 deletions

View File

@ -33,6 +33,12 @@
# cpu_mode="custom" and virt_type="kvm|qemu".
# Defaults to undef
#
# [*libvirt_cpu_model_extra_flags*]
# (optional) This allows specifying granular CPU feature flags when
# specifying CPU models. Only valid, if cpu_mode and cpu_model
# attributes are specified and only if cpu_mode="custom".
# Defaults to undef
#
# [*libvirt_snapshot_image_format*]
# (optional) Format to save snapshots to. Some filesystems
# have a preference and only operate on raw or qcow2
@ -138,6 +144,7 @@ class nova::compute::libvirt (
$migration_support = false,
$libvirt_cpu_mode = false,
$libvirt_cpu_model = undef,
$libvirt_cpu_model_extra_flags = undef,
$libvirt_snapshot_image_format = $::os_service_default,
$libvirt_disk_cachemodes = [],
$libvirt_hw_disk_discard = $::os_service_default,
@ -235,14 +242,20 @@ class nova::compute::libvirt (
validate_string($libvirt_cpu_model)
nova_config {
'libvirt/cpu_model': value => $libvirt_cpu_model;
'libvirt/cpu_model_extra_flags': value => $libvirt_cpu_model_extra_flags;
}
} else {
nova_config {
'libvirt/cpu_model': ensure => absent;
'libvirt/cpu_model_extra_flags': ensure => absent;
}
if $libvirt_cpu_model {
warning('$libvirt_cpu_model requires that $libvirt_cpu_mode => "custom" and will be ignored')
}
if $libvirt_cpu_model_extra_flags {
warning('$libvirt_cpu_model_extra_flags requires that $libvirt_cpu_mode => "custom" and will be ignored')
}
}
if size($libvirt_disk_cachemodes) > 0 {

View File

@ -0,0 +1,12 @@
---
features:
- |
This allows for specifying granular CPU feature flags, when
specifying CPU models. It should be set only if ``cpu_mode``
and ``cpu_model`` conf parameter are set and ``cpu_mode``
parameter value is set to "custom".
The recent "Meltdown" CVE fixes have resulted in critical
performance penalty which impacts every Nova guest within
certain CPU models.
More info is available in `nova release notes <https://docs.openstack.org/releasenotes/nova/queens.html#bug-fixes>`_.

View File

@ -50,6 +50,7 @@ describe 'nova::compute::libvirt' do
it { is_expected.to contain_nova_config('libvirt/virt_type').with_value('kvm')}
it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('host-model')}
it { is_expected.to contain_nova_config('libvirt/cpu_model').with_ensure('absent')}
it { is_expected.to contain_nova_config('libvirt/cpu_model_extra_flags').with_ensure('absent')}
it { is_expected.to contain_nova_config('libvirt/snapshot_image_format').with_ensure('absent')}
it { is_expected.to contain_nova_config('libvirt/disk_cachemodes').with_ensure('absent')}
it { is_expected.to contain_nova_config('libvirt/inject_password').with_value(false)}
@ -68,6 +69,7 @@ describe 'nova::compute::libvirt' do
:vncserver_listen => '0.0.0.0',
:libvirt_cpu_mode => 'host-passthrough',
:libvirt_cpu_model => 'kvm64',
:libvirt_cpu_model_extra_flags => 'pcid',
:libvirt_snapshot_image_format => 'raw',
:libvirt_disk_cachemodes => ['file=directsync','block=none'],
:libvirt_hw_disk_discard => 'unmap',
@ -94,6 +96,7 @@ describe 'nova::compute::libvirt' do
it { is_expected.to contain_nova_config('libvirt/virt_type').with_value('qemu')}
it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('host-passthrough')}
it { is_expected.to contain_nova_config('libvirt/cpu_model').with_ensure('absent')}
it { is_expected.to contain_nova_config('libvirt/cpu_model_extra_flags').with_ensure('absent')}
it { is_expected.to contain_nova_config('libvirt/snapshot_image_format').with_ensure('absent')}
it { is_expected.to contain_nova_config('libvirt/disk_cachemodes').with_value('file=directsync,block=none')}
it { is_expected.to contain_nova_config('libvirt/hw_disk_discard').with_value('unmap')}
@ -127,12 +130,14 @@ describe 'nova::compute::libvirt' do
describe 'with custom cpu_mode' do
let :params do
{ :libvirt_cpu_mode => 'custom',
:libvirt_cpu_model => 'kvm64' }
{ :libvirt_cpu_mode => 'custom',
:libvirt_cpu_model => 'kvm64',
:libvirt_cpu_model_extra_flags => 'pcid' }
end
it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('custom')}
it { is_expected.to contain_nova_config('libvirt/cpu_model').with_value('kvm64')}
it { is_expected.to contain_nova_config('libvirt/cpu_model_extra_flags').with_value('pcid')}
end
describe 'with qcow2 as snapshot_image_format' do