7: def process_zpool_data(pool_array)
8: if pool_array == []
9: return Hash.new(:absent)
10: end
11:
12: pool = Hash.new
13: pool[:pool] = pool_array[0]
14: pool_array.shift
15:
16: tmp = []
17:
18:
19: pool_array.reverse.each do |value|
20: sym = nil
21: case value
22: when "spares"; sym = :spare
23: when "logs"; sym = :log
24: when "mirror", "raidz1", "raidz2"
25: sym = value == "mirror" ? :mirror : :raidz
26: pool[:raid_parity] = "raidz2" if value == "raidz2"
27: else
28: tmp << value
29: sym = :disk if value == pool_array.first
30: end
31:
32: if sym
33: pool[sym] = pool[sym] ? pool[sym].unshift(tmp.reverse.join(' ')) : [tmp.reverse.join(' ')]
34: tmp.clear
35: end
36: end
37:
38: pool
39: end