From 79adb5e483ee61910aafa57ab32a565c38338860 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Mon, 30 Nov 2015 09:47:51 +0000 Subject: [PATCH] Gather information on MD RAID arrays --- .../hardware/templates/default/ohai.rb.erb | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/cookbooks/hardware/templates/default/ohai.rb.erb b/cookbooks/hardware/templates/default/ohai.rb.erb index 6c83be31e..965a52af6 100644 --- a/cookbooks/hardware/templates/default/ohai.rb.erb +++ b/cookbooks/hardware/templates/default/ohai.rb.erb @@ -86,11 +86,14 @@ Ohai.plugin(:Hardware) do disk[:disks] = [] find_direct_disks(disk) + find_hp_disks(disk) if File.exist?("/usr/sbin/hpssacli") find_megaraid_disks(disk) if File.exist?("/usr/sbin/megacli") # aacraid # areca (/opt/areca/x86_64/cli64) + find_md_arrays(disk) + disk end @@ -127,13 +130,36 @@ Ohai.plugin(:Hardware) do :vendor => vendor, :model => model, :firmware_version => read_sysctl_file("#{device}/rev"), - :size => size + :size => size, + :arrays => [] } end end end end + def find_md_arrays(devices) + File.new("/proc/mdstat", "r").each do |line| + next unless line =~ /^(md\d+) : active raid(\d+)((?: [a-z]+\d+\[\d+\](?:\([A-Z]\))*)+)$/ + + array = { + :id => devices[:arrays].count, + :device => "/dev/#{Regexp.last_match(1)}", + :raid_level => Regexp.last_match(2), + :disks => [] + } + + Regexp.last_match(3).scan(/ ([a-z]+)\d+\[\d+\](?:\([A-Z]\))*/).flatten.each do |device| + if disk = devices[:disks].find { |d| d[:device] == "/dev/#{device}" } + disk[:arrays] << array[:id] + array[:disks] << disk[:id] + end + end + + devices[:arrays] << array + end + end + def find_hp_disks(devices) controllers = [] disks = [] @@ -182,7 +208,7 @@ Ohai.plugin(:Hardware) do disk = { :id => devices[:disks].count, :controller => controller[:id], - :array => array[:id], + :arrays => [array[:id]], :location => Regexp.last_match(1), :smart_device => "cciss,#{disks.find_index(Regexp.last_match(1))}" } @@ -280,7 +306,7 @@ Ohai.plugin(:Hardware) do disk = { :id => devices[:disks].count, :controller => controller[:id], - :array => array[:id] + :arrays => [array[:id]] } devices[:disks] << disk -- 2.43.2