From 74d79a824ff08ac573c1ea8c24c1ab70b87abc34 Mon Sep 17 00:00:00 2001 From: Oliver Walsh Date: Thu, 26 Nov 2020 14:44:37 +0000 Subject: [PATCH] Revert "Remove parameter nova::compute::pci_passthrough" This should never have been merged. It removed more than the deprecated param, breaking the pci config on computes. Also should have warned for at least 1 cycle before removal. It also wasn't removed correctly as the pick remained in nova::compute::pci so (IIUC) the deprecated param still works today if set in hieradata. This reverts commit d845b6f0aefaaab0b65b32cd22ccda8c2c8ee6ae. Change-Id: I5b3d9dbbd41d060134444609458b3e8bba606ae6 (cherry picked from commit e7f323a1f4fb37c5a8a70a123f08fc5e1e5a7843) --- manifests/compute.pp | 15 +++++++++ spec/classes/nova_compute_spec.rb | 55 +++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/manifests/compute.pp b/manifests/compute.pp index e70065d0a..74e2032cd 100644 --- a/manifests/compute.pp +++ b/manifests/compute.pp @@ -290,6 +290,14 @@ # this should be set in the api.pp class instead. # Defaults to undef # +# [*pci_passthrough*] +# DEPRECATED. Use nova::compute::pci::passthrough instead. +# (optional) Pci passthrough list of hash. +# Defaults to undef +# Example of format: +# [ { "vendor_id" => "1234","product_id" => "5678" }, +# { "vendor_id" => "4321","product_id" => "8765", "physical_network" => "default" } ] +# class nova::compute ( $enabled = true, $manage_service = true, @@ -347,6 +355,7 @@ class nova::compute ( $install_bridge_utils = undef, $vcpu_pin_set = undef, $allow_resize_to_same_host = undef, + $pci_passthrough = undef, ) { include nova::deps @@ -361,6 +370,12 @@ class nova::compute ( $max_concurrent_builds) include nova::pci + if $pci_passthrough { + # Note: also remove the pick from nova::compute::pci + warning('The pci_passthrough parameter is deprecated and will be removed in X. Please use nova::compute::pci::passthrough instead.') + } + include nova::compute::pci + include nova::compute::vgpu if $neutron_enabled { diff --git a/spec/classes/nova_compute_spec.rb b/spec/classes/nova_compute_spec.rb index c484f107f..b969b2727 100644 --- a/spec/classes/nova_compute_spec.rb +++ b/spec/classes/nova_compute_spec.rb @@ -85,6 +85,11 @@ describe 'nova::compute' do is_expected.to contain_package('genisoimage').that_requires('Anchor[nova::install::begin]') is_expected.to contain_package('genisoimage').that_comes_before('Anchor[nova::install::end]') end + + it 'configures nova pci_passthrough_whitelist' do + is_expected.to contain_class('nova::compute::pci') + is_expected.to contain_nova_config('pci/passthrough_whitelist').with(:value => '') + end end context 'with overridden parameters' do @@ -211,6 +216,56 @@ describe 'nova::compute' do end end + context 'with pci params array' do + let :params do + { + :pci_passthrough => [ + { + "vendor_id" => "8086", + "product_id" => "0126" + }, + { + "vendor_id" => "9096", + "product_id" => "1520", + "physical_network" => "physnet1" + } + ], + } + end + + it 'configures nova pci_passthrough_whitelist entries' do + is_expected.to contain_class('nova::compute::pci') + is_expected.to contain_nova_config('pci/passthrough_whitelist').with( + 'value' => ['{"vendor_id":"8086","product_id":"0126"}','{"vendor_id":"9096","product_id":"1520","physical_network":"physnet1"}'] + ) + end + end + + context 'with pci params JSON encoded string (deprecated)' do + let :params do + { + :pci_passthrough => "[{\"vendor_id\":\"8086\",\"product_id\":\"0126\"},{\"vendor_id\":\"9096\",\"product_id\":\"1520\",\"physical_network\":\"physnet1\"}]", + } + end + + it 'configures nova pci_passthrough_whitelist entries' do + is_expected.to contain_class('nova::compute::pci') + is_expected.to contain_nova_config('pci/passthrough_whitelist').with( + 'value' => ['{"vendor_id":"8086","product_id":"0126"}','{"vendor_id":"9096","product_id":"1520","physical_network":"physnet1"}'] + ) + end + end + + context 'when vcpu_pin_set and pci params are empty' do + let :params do + { :pci_passthrough => ""} + end + it 'clears pci_passthrough configuration' do + is_expected.to contain_class('nova::compute::pci') + is_expected.to contain_nova_config('pci/passthrough_whitelist').with(:value => '') + end + end + context 'with reserved_huge_pages array' do let :params do {