-disks = []
-
-node[:block_device].each do |name, attributes|
- disks << { :device => name } if attributes[:vendor] == "ATA"
-end
-
-if status_packages["cciss-vol-status"]
- status_packages["cciss-vol-status"].each do |device|
- IO.popen(["cciss_vol_status", "-V", "/dev/#{device}"]).each do |line|
- disks << { :device => device, :driver => "cciss", :id => Regexp.last_match[1].to_i - 1 } if line =~ / bay ([0-9]+) +HP /
- end
- end
-end
-
-if status_packages["megaclisas-status"]
- controller = 0
-
- Dir.glob("/sys/class/scsi_host/host*") do |host|
- driver = File.new("#{host}/proc_name").read.chomp
-
- next unless driver == "megaraid_sas"
-
- bus = host.sub("/sys/class/scsi_host/host", "")
- device = File.basename(Dir.glob("/sys/bus/scsi/devices/#{bus}:*/scsi_generic/*").first)
-
- IO.popen(["megacli", "-PDList", "-a#{controller}", "-NoLog"]).each do |line|
- disks << { :device => device, :driver => "megaraid", :id => Regexp.last_match[1] } if line =~ /^Device Id: ([0-9]+)$/
-
- disks.pop if line =~ /^Firmware state: Hotspare, Spun down$/
+disks = if node[:hardware][:disk]
+ node[:hardware][:disk][:disks]
+ else
+ []
+ end
+
+disks = disks.map do |disk|
+ next if disk[:state] == "spun_down"
+
+ if disk[:smart_device]
+ controller = node[:hardware][:disk][:controllers][disk[:controller]]
+ device = controller[:device].sub("/dev/", "")
+ smart = disk[:smart_device]
+
+ if device.start_with?("cciss/") && smart =~ /^cciss,(\d+)$/
+ array = node[:hardware][:disk][:arrays][disk[:arrays].first]
+ munin = "cciss-3#{array[:wwn]}-#{Regexp.last_match(1)}"
+ elsif smart =~ /^.*,(\d+)$/
+ munin = "#{device}-#{Regexp.last_match(1)}"
+ elsif smart =~ %r{^.*,(\d+)/(\d+)$}
+ munin = "#{device}-#{Regexp.last_match(1)}:#{Regexp.last_match(2)}"