diff options
author | karthik s <ksundara@redhat.com> | 2016-08-26 21:48:04 +0530 |
---|---|---|
committer | karthik s <ksundara@redhat.com> | 2016-08-29 19:41:35 +0530 |
commit | eec3bba44b5a7e09dba4d427bd0d3d71a4956a7a (patch) | |
tree | e5dd6531b22285007b24470c808f5e6df8d59af4 /spec | |
parent | 6a6aeaa95313bf78c0cf19cca6331bc1d23e6563 (diff) |
Configure the numvfs for SRIOV interfaces
This patch shall create VFs via the PCI SYS interface.
Default value : $::os_service_default
Sample Format : ['eth0:4','eth2:128']
For values as in sample format, the sriov_numvfs config files
for eth0 and eth2 will have the values 4 and 128 respectively
The SR-IOV numvfs configuration shall be persisted in /sbin/ifup-local
so that, during the bootup of the compute nodes, the numvfs
configuration will be restored.
Change-Id: I7450b904475bdf46498d9af633416b3eba12f761
Implements: blueprint tripleo-sriov
Signed-off-by: karthik s <ksundara@redhat.com>
Diffstat (limited to 'spec')
-rw-r--r-- | spec/classes/tripleo_host_sriov_spec.rb | 39 | ||||
-rw-r--r-- | spec/defines/tripleo_host_sriov_numvfs_persistence_spec.rb | 40 | ||||
-rw-r--r-- | spec/unit/provider/sriov_vf_config/numvfs_spec.rb | 40 | ||||
-rw-r--r-- | spec/unit/type/sriov_vf_config_spec.rb | 47 |
4 files changed, 166 insertions, 0 deletions
diff --git a/spec/classes/tripleo_host_sriov_spec.rb b/spec/classes/tripleo_host_sriov_spec.rb new file mode 100644 index 0000000..15d3813 --- /dev/null +++ b/spec/classes/tripleo_host_sriov_spec.rb @@ -0,0 +1,39 @@ +require 'spec_helper' + +describe 'tripleo::host::sriov' do + + shared_examples_for 'sriov vfs configuration for Red Hat distributions' do + + let :facts do + { + :osfamily => 'RedHat', + :operatingsystemmajrelease => 7, + } + end + + let :params do + {:number_of_vfs => []} + end + + it 'does not configure numvfs by default' do + is_expected.not_to contain_sriov_vf_config([]) + end + + context 'when number_of_vfs is configured' do + let :params do + {:number_of_vfs => ['eth0:4','eth1:5']} + end + + it 'configures numvfs' do + is_expected.to contain_sriov_vf_config('eth0:4').with( :ensure => 'present' ) + is_expected.to contain_sriov_vf_config('eth1:5').with( :ensure => 'present') + is_expected.to contain_tripleo__host__sriov__numvfs_persistence('persistent_numvfs').with( + :vf_defs => ['eth0:4','eth1:5'], + :content_string => "#!/bin/bash\n" + ) + end + end + end + + it_configures 'sriov vfs configuration for Red Hat distributions' +end diff --git a/spec/defines/tripleo_host_sriov_numvfs_persistence_spec.rb b/spec/defines/tripleo_host_sriov_numvfs_persistence_spec.rb new file mode 100644 index 0000000..57559a2 --- /dev/null +++ b/spec/defines/tripleo_host_sriov_numvfs_persistence_spec.rb @@ -0,0 +1,40 @@ +require 'spec_helper' + +describe 'tripleo::host::sriov::numvfs_persistence' do + + describe 'confugure numvfs for persistence' do + + let :title do + 'numvfs' + end + + let :params do + { + :name => 'persistence', + :vf_defs => ['eth0:10','eth1:8'], + :content_string => "Hashbang\n" + } + end + + it 'configures persistence' do + is_expected.to contain_file('/etc/sysconfig/allocate_vfs').with( + :ensure => 'file', + :content => "Hashbang\n[ \"eth0\" == \"\$1\" ] && echo 10 > /sys/class/net/eth0/device/sriov_numvfs\n[ \"eth1\" == \"\$1\" ] && echo 8 > /sys/class/net/eth1/device/sriov_numvfs\n", + :group => 'root', + :mode => '0755', + :owner => 'root', + ) + is_expected.to contain_file('/sbin/ifup-local').with( + :group => 'root', + :mode => '0755', + :owner => 'root', + :content => '#!/bin/bash', + :replace => false, + ) + is_expected.to contain_file_line('call_ifup-local').with( + :path => '/sbin/ifup-local', + :line => '/etc/sysconfig/allocate_vfs $1', + ) + end + end +end diff --git a/spec/unit/provider/sriov_vf_config/numvfs_spec.rb b/spec/unit/provider/sriov_vf_config/numvfs_spec.rb new file mode 100644 index 0000000..ac1a398 --- /dev/null +++ b/spec/unit/provider/sriov_vf_config/numvfs_spec.rb @@ -0,0 +1,40 @@ +require 'puppet' +require 'spec_helper' +require 'puppet/provider/sriov_vf_config/numvfs' + +provider_class = Puppet::Type.type(:sriov_vf_config). + provider(:numvfs) + +describe provider_class do + + let(:test_cfg_path) { "/tmp/test-ifup-local.txt" } + let :numvfs_conf do + { + :name => 'eth0:10', + :ensure => 'present', + } + end + + describe 'when setting the attributes' do + let :resource do + Puppet::Type::Sriov_vf_config.new(numvfs_conf) + end + + let :provider do + provider_class.new(resource) + end + + it 'should return the correct interface name' do + expect(provider.sriov_get_interface).to eql('eth0') + end + + it 'should return the correct numvfs value' do + expect(provider.sriov_numvfs_value).to eql(10) + end + + it 'should return path of the file to enable vfs' do + expect(provider.sriov_numvfs_path).to eql('/sys/class/net/eth0/device/sriov_numvfs') + end + end + +end diff --git a/spec/unit/type/sriov_vf_config_spec.rb b/spec/unit/type/sriov_vf_config_spec.rb new file mode 100644 index 0000000..9a911f6 --- /dev/null +++ b/spec/unit/type/sriov_vf_config_spec.rb @@ -0,0 +1,47 @@ +require 'puppet' +require 'puppet/type/sriov_vf_config' + +describe 'Puppet::Type.type(:sriov_vf_config)' do + it 'should allow name to be passed' do + expect{Puppet::Type.type(:sriov_vf_config).new( + :name => 'eth0:10', + :ensure => 'present' + )}.not_to raise_error + end + it 'should allow name to be passed with -' do + expect{Puppet::Type.type(:sriov_vf_config).new( + :name => 'eth-0:10', + :ensure => 'present' + )}.not_to raise_error + end + it 'should allow name to be passed with _' do + expect{Puppet::Type.type(:sriov_vf_config).new( + :name => 'eth_0:10', + :ensure => 'present' + )}.not_to raise_error + end + it 'should throw error for invalid format' do + expect{Puppet::Type.type(:sriov_vf_config).new( + :name => 'eth0', + :ensure => 'present' + )}.to raise_error(Puppet::ResourceError) + end + it 'should throw error for invalid format without interface name' do + expect{Puppet::Type.type(:sriov_vf_config).new( + :name => ':9', + :ensure => 'present' + )}.to raise_error(Puppet::ResourceError) + end + it 'should throw error for invalid format for numvfs' do + expect{Puppet::Type.type(:sriov_vf_config).new( + :name => 'eth8:none', + :ensure => 'present' + )}.to raise_error(Puppet::ResourceError) + end + it 'should throw error for invalid format without numvfs' do + expect{Puppet::Type.type(:sriov_vf_config).new( + :name => 'eth0:', + :ensure => 'present' + )}.to raise_error(Puppet::ResourceError) + end +end |