Page MenuHomePhabricator
Paste P17067

disk fact
ActivePublic

Authored by jbond on Aug 24 2021, 11:35 AM.
Tags
None
Referenced Files
F34618728: disk fact
Aug 24 2021, 11:35 AM
Subscribers
require 'facter'
Facter.add(:wmf__disks) do
confine :kernel => 'Linux'
disk_dir = '/sys/block'
disks = {ssd: [], hdd: [], virtual: []}
virtual = Facter.fact('virtual').value
setcode do
if virtual == 'physical'
Dir.each_child(disk_dir) do |disk|
type = File.read(File.join(disk_dir, disk, 'queue/rotational')).strip
if type == '0'
disks[:ssd] << disk
else
disks[:hdd] << disk
end
end
disks[:type] = disks[:hdd].length > disks[:ssd].length ? 'hdd' : 'ssd'
else
disks[:virtual] = Dir.children(disk_dir)
disks[:type] = virtual
end
disks
end
end

Event Timeline

require 'facter'

Facter.add(:wmf__disks) do
  confine :kernel => 'Linux'
  base_dir = '/sys/block'

  wmf_disks = {}
  Facter.fact('disks').value.keys.each{ |disk| wmf_disks.merge!(disk => {}) }
  virtual = Facter.fact('virtual').value
  setcode do
    wmf_disks.each do |disk, value|
      if virtual == 'physical'
        type = File.read(File.join(base_dir, disk, 'queue/rotational')).strip
        value[:type] = type == '0' ? 'ssd' : 'hdd'
      else
        value[:type] = 'virtual'
      end
    end
    wmf_disks
  end
end