summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorkarthik s <ksundara@redhat.com>2016-08-26 21:48:04 +0530
committerkarthik s <ksundara@redhat.com>2016-08-29 19:41:35 +0530
commiteec3bba44b5a7e09dba4d427bd0d3d71a4956a7a (patch)
treee5dd6531b22285007b24470c808f5e6df8d59af4 /spec
parent6a6aeaa95313bf78c0cf19cca6331bc1d23e6563 (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.rb39
-rw-r--r--spec/defines/tripleo_host_sriov_numvfs_persistence_spec.rb40
-rw-r--r--spec/unit/provider/sriov_vf_config/numvfs_spec.rb40
-rw-r--r--spec/unit/type/sriov_vf_config_spec.rb47
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