puppet-vswitch/lib/facter/pci_address.rb
Benedikt Trefzer 8a3479db80 check if /proc/bus/pci/devices is available
This avoids an error thrown if the file is not available.
Hint: the facter code is executed even if the module is
not included on the catalog.

Change-Id: Ie7a3dce6d42d3b2274bb5578862d677841e7bdc3
2017-06-03 08:12:24 +02:00

33 lines
878 B
Ruby

require 'facter'
if File.file?("/proc/bus/pci/devices")
drivers_details=File.read("/proc/bus/pci/devices")
drivers_lines=drivers_details.split("\n")
else
drivers_lines=Array.new
end
drivers=Hash.new
drivers_lines.each do |line|
line = line.gsub(/^\s+|\s+$/m, '').split(" ")
if line.length == 18
pci_embed = line[0]
driver = line[-1]
bus = pci_embed[0] + pci_embed[1]
dev = ((pci_embed[2].to_i(16) << 1) + (pci_embed[3].to_i(16) >> 3)).to_s(16).rjust(2,"0").upcase
fun = (pci_embed[3].to_i(16) & 7).to_s(16).upcase
pci = "0000:" + bus + ":" + dev + "." + fun
if not drivers.has_key?(driver)
drivers[driver] = Array.new
end
drivers[driver] << pci
end
end
drivers.each do |driver,pci_addr|
Facter.add("pci_address_driver_#{driver}") do
confine :kernel => :linux
setcode do
pci_addr.join(',')
end
end
end