From 7b6c0424a3134561c5ef1fb2436ca9a54bf7b6e3 Mon Sep 17 00:00:00 2001 From: Oliver Walsh Date: Thu, 14 Jun 2018 12:40:20 +0100 Subject: [PATCH] Expose devices/enabled_vgpu_types config option This exposes the devices/enabled_vgpu_types config option which is required for vgpu support. bp tripleo-vgpu Change-Id: I418b5ed3ee43f8621c2997980d17fa20861d009d --- manifests/compute.pp | 1 + manifests/compute/vgpu.pp | 20 ++++++++ .../notes/vgpu_devices-4441729018e59ee1.yaml | 5 ++ spec/classes/nova_compute_vgpu_spec.rb | 51 +++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 manifests/compute/vgpu.pp create mode 100644 releasenotes/notes/vgpu_devices-4441729018e59ee1.yaml create mode 100644 spec/classes/nova_compute_vgpu_spec.rb diff --git a/manifests/compute.pp b/manifests/compute.pp index cb6771ec6..8e61db109 100644 --- a/manifests/compute.pp +++ b/manifests/compute.pp @@ -208,6 +208,7 @@ class nova::compute ( $vcpu_pin_set_real = pick(join(any2array($vcpu_pin_set), ','), $::os_service_default) include ::nova::pci + include ::nova::compute::vgpu if $keymgr_api_class { warning('The keymgr_api_class parameter is deprecated, use keymgr_backend') diff --git a/manifests/compute/vgpu.pp b/manifests/compute/vgpu.pp new file mode 100644 index 000000000..966d703cd --- /dev/null +++ b/manifests/compute/vgpu.pp @@ -0,0 +1,20 @@ +# Class nova::compute::vgpu +# +# Configures nova compute vgpu options +# +# === Parameters: +# +# [*enabled_vgpu_types*] +# (optional) Specify which specific GPU type(s) the instances can get +# Defaults to $::os_service_default +# Example: 'nvidia-35' or ['nvidia-35', 'nvidia-36'] + +class nova::compute::vgpu( + $enabled_vgpu_types = $::os_service_default +) { + include ::nova::deps + + nova_config { + 'devices/enabled_vgpu_types': value => join(any2array($enabled_vgpu_types), ','); + } +} diff --git a/releasenotes/notes/vgpu_devices-4441729018e59ee1.yaml b/releasenotes/notes/vgpu_devices-4441729018e59ee1.yaml new file mode 100644 index 000000000..f2bbefbe4 --- /dev/null +++ b/releasenotes/notes/vgpu_devices-4441729018e59ee1.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Exposes the devices/enabled_vgpu_types config option for vgpu support. + More information in the `nova vgpu documentation `_. diff --git a/spec/classes/nova_compute_vgpu_spec.rb b/spec/classes/nova_compute_vgpu_spec.rb new file mode 100644 index 000000000..de6f2767a --- /dev/null +++ b/spec/classes/nova_compute_vgpu_spec.rb @@ -0,0 +1,51 @@ +require 'spec_helper' + +describe 'nova::compute::vgpu' do + + shared_examples_for 'nova-compute-vgpu' do + context 'with default parameters' do + it 'clears vgpu devices' do + is_expected.to contain_nova_config('devices/enabled_vgpu_types').with(:value => '') + end + end + + context 'with vgpu device' do + let :params do + { + :enabled_vgpu_types => "nvidia-35", + } + end + it 'configures nova vgpu device entries' do + is_expected.to contain_nova_config('devices/enabled_vgpu_types').with( + 'value' => 'nvidia-35' + ) + end + end + + context 'with multiple vgpu devices' do + let :params do + { + :enabled_vgpu_types => ["nvidia-35","nvidia-36"] + } + end + + it 'configures nova vgpu device entries' do + is_expected.to contain_nova_config('devices/enabled_vgpu_types').with( + 'value' => "nvidia-35,nvidia-36" + ) + end + end + end + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge!(OSDefaults.get_facts()) + end + + it_configures 'nova-compute-vgpu' + end + end +end