fuel-plugin-scaleio/deployment_scripts/puppet/modules/scaleio_fuel/lib/facter/disks.rb

75 lines
2.4 KiB
Ruby

require 'date'
require 'facter'
$scaleio_tier1_guid = 'f2e81bdc-99b3-4bf6-a68f-dc794da6cd8e'
$scaleio_tier2_guid = 'd5321bb3-1098-433e-b4f5-216712fcd06f'
$scaleio_tier3_guid = '97987bfc-a9ba-40f3-afea-13e1a228e492'
$scaleio_rfcache_guid = '163ddeea-95dd-4af0-a329-140623590c47'
$scaleio_tiers = {
'tier1' => $scaleio_tier1_guid,
'tier2' => $scaleio_tier2_guid,
'tier3' => $scaleio_tier3_guid,
'rfcache' => $scaleio_rfcache_guid,
}
$scaleio_log_file = "/var/log/fuel-plugin-scaleio.log"
def debug_log(msg)
File.open($scaleio_log_file, 'a') {|f| f.write("%s: %s\n" % [Time.now.strftime("%Y-%m-%d %H:%M:%S"), msg]) }
end
$scaleio_tiers.each do |tier, part_guid|
facter_name = "sds_storage_devices_%s" % tier
Facter.add(facter_name) do
setcode do
devices = nil
res = Facter::Util::Resolution.exec("lsblk -nr -o KNAME,TYPE 2>%s | awk '/disk/ {print($1)}'" % $scaleio_log_file)
if res and res != ''
parts = []
disks = res.split(' ')
disks.each do |d|
disk_path = "/dev/%s" % d
part_number = Facter::Util::Resolution.exec("partx -s %s -oTYPE,NR 2>%s | awk '/%s/ {print($2)}'" % [disk_path, $scaleio_log_file, part_guid])
parts.push("%s%s" % [disk_path, part_number]) unless !part_number or part_number == ''
end
if parts.count() > 0
devices = parts.join(',')
end
end
debug_log("%s='%s'" % [facter_name, devices])
devices
end
end
end
# facter to validate storage devices that are less than 96GB
Facter.add('sds_storage_small_devices') do
setcode do
result = nil
disks1 = Facter.value('sds_storage_devices_tier1')
disks2 = Facter.value('sds_storage_devices_tier2')
disks3 = Facter.value('sds_storage_devices_tier3')
if disks1 or disks2 or disks3
disks = [disks1, disks2, disks3].join(',')
end
if disks
devices = disks.split(',')
if devices.count() > 0
devices.each do |d|
size = Facter::Util::Resolution.exec("partx -r -b -o SIZE %s 2>%s | grep -v SIZE" % [d, $scaleio_log_file])
if size and size != '' and size.to_i < 96*1024*1024*1024
if not result
result = {}
end
result[d] = "%s MB" % (size.to_i / 1024 / 1024)
end
end
result = result.to_s unless !result
end
end
debug_log("%s='%s'" % ['sds_storage_small_devices', result])
result
end
end