aboutsummaryrefslogtreecommitdiffstats
path: root/lib/puppet/provider
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/provider')
-rw-r--r--lib/puppet/provider/sriov_vf_config/numvfs.rb57
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