diff --git a/manifests/compute.pp b/manifests/compute.pp index 02060cf30..a67be51f4 100644 --- a/manifests/compute.pp +++ b/manifests/compute.pp @@ -197,6 +197,14 @@ # pinned and unpinned instances on the same host. # 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, @@ -239,6 +247,7 @@ class nova::compute ( $neutron_enabled = undef, $install_bridge_utils = undef, $vcpu_pin_set = undef, + $pci_passthrough = undef, ) { include ::nova::deps @@ -249,6 +258,12 @@ class nova::compute ( $cpu_dedicated_set_real = pick(join(any2array($cpu_dedicated_set), ','), $::os_service_default) 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 include ::nova::vendordata diff --git a/spec/classes/nova_compute_spec.rb b/spec/classes/nova_compute_spec.rb index 509750e78..f6da37e66 100644 --- a/spec/classes/nova_compute_spec.rb +++ b/spec/classes/nova_compute_spec.rb @@ -77,6 +77,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 @@ -182,6 +187,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 {