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 /lib/puppet/provider/sriov_vf_config | |
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 'lib/puppet/provider/sriov_vf_config')
-rw-r--r-- | lib/puppet/provider/sriov_vf_config/numvfs.rb | 57 |
1 files changed, 57 insertions, 0 deletions
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/<sriov_interface_name>/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 |