From eec3bba44b5a7e09dba4d427bd0d3d71a4956a7a Mon Sep 17 00:00:00 2001 From: karthik s Date: Fri, 26 Aug 2016 21:48:04 +0530 Subject: 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 --- lib/puppet/provider/sriov_vf_config/numvfs.rb | 57 +++++++++++++++++++++++++++ lib/puppet/type/sriov_vf_config.rb | 10 +++++ 2 files changed, 67 insertions(+) create mode 100644 lib/puppet/provider/sriov_vf_config/numvfs.rb create mode 100644 lib/puppet/type/sriov_vf_config.rb (limited to 'lib') diff --git a/lib/puppet/provider/sriov_vf_config/numvfs.rb b/lib/puppet/provider/sriov_vf_config/numvfs.rb new file mode 100644 index 0000000..cfa663c --- /dev/null +++ b/lib/puppet/provider/sriov_vf_config/numvfs.rb @@ -0,0 +1,57 @@ +Puppet::Type.type(:sriov_vf_config).provide(:numvfs) do + desc <<-EOT + The file /sys/class/net//device/sriov_numvfs will be + present when a physical PCIe device supports SR-IOV. A number written to + this file will enable the specified number of VFs. This provider shall read + the file and ensure that the value is zero, before writing the number of + VFs that should be enabled. If the VFs needs to be disabled then we shall + write a zero to this file. + EOT + + def create + if File.file?(sriov_numvfs_path) + _set_numvfs + else + fail("#{sriov_numvfs_path} doesn't exist. Check if #{sriov_get_interface} is a valid network interface supporting SR-IOV") + end + end + + def destroy + if File.file?(sriov_numvfs_path) + File.write(sriov_numvfs_path,"0") + end + end + + def exists? + if File.file?(sriov_numvfs_path) + cur_value = File.read(sriov_numvfs_path) + if cur_value.to_i == sriov_numvfs_value + return true + end + end + return false + end + + def _set_numvfs + # During an update, the content of file sriov_numvfs_path has to be set + # to 0 (ZERO), before writing the actual value + cur_value = File.read(sriov_numvfs_path) + if cur_value != 0 + File.write(sriov_numvfs_path,"0") + end + File.write(sriov_numvfs_path,sriov_numvfs_value) + end + + def sriov_numvfs_path + "/sys/class/net/#{sriov_get_interface}/device/sriov_numvfs" + end + + def sriov_get_interface + resource[:name].split(':', 2).first + end + + def sriov_numvfs_value + resource[:name].split(':', 2).last.to_i + end + +end diff --git a/lib/puppet/type/sriov_vf_config.rb b/lib/puppet/type/sriov_vf_config.rb new file mode 100644 index 0000000..09a3671 --- /dev/null +++ b/lib/puppet/type/sriov_vf_config.rb @@ -0,0 +1,10 @@ +Puppet::Type.newtype(:sriov_vf_config) do + + ensurable + + newparam(:name) do + desc "sriov_numvfs conf as : format" + newvalues(/^[a-z0-9\-_]+:[0-9]+$/) + end + +end -- cgit 1.2.3-korg