class Facter::Resolvers::Freebsd::Geom

Constants

DISKS_ATTRIBUTES
PARTITIONS_ATTRIBUTES

Private Class Methods

each_geom_class_provider(geom_class_name, geom_topology, &block) click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 41
def each_geom_class_provider(geom_class_name, geom_topology, &block)
  REXML::XPath.each(geom_topology, "/mesh/class[name/text() = '#{geom_class_name}']/geom/provider", &block)
end
geom_confxml() click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 92
def geom_confxml
  Facter::Freebsd::FfiHelper.sysctl_by_name(:string, 'kern.geom.confxml')
end
geom_topology() click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 88
def geom_topology
  REXML::Document.new(geom_confxml)
end
post_resolve(fact_name) click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 13
def post_resolve(fact_name)
  @fact_list.fetch(fact_name) { read_facts(fact_name) }
end
read_data(fact_name, geom_topology, data_to_read) click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 28
def read_data(fact_name, geom_topology, data_to_read)
  fact_list_key = fact_name == 'DISK' ? :disks : :partitions
  @fact_list[fact_list_key] = {}

  each_geom_class_provider(fact_name, geom_topology) do |provider|
    name = provider.get_text('./name').value

    @fact_list[fact_list_key][name] = data_to_read.map do |x|
      send(x, provider)
    end.inject(:merge)
  end
end
read_facts(fact_name) click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 17
def read_facts(fact_name)
  require_relative 'ffi/ffi_helper'
  require 'rexml/document'

  topology = geom_topology
  read_data('DISK', topology, DISKS_ATTRIBUTES)
  read_data('PART', topology, PARTITIONS_ATTRIBUTES)

  @fact_list[fact_name]
end
read_model(provider) click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 56
def read_model(provider)
  res = {}
  return res unless (model = provider.get_text('./config/descr'))

  res[:model] = model.value
  res
end
read_partlabel(provider) click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 64
def read_partlabel(provider)
  res = {}
  return res unless (rawuuid = provider.get_text('./config/label'))

  res[:partlabel] = rawuuid.value
  res
end
read_partuuid(provider) click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 72
def read_partuuid(provider)
  res = {}
  return res unless (rawuuid = provider.get_text('./config/rawuuid'))

  res[:partuuid] = rawuuid.value
  res
end
read_serial_number(provider) click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 80
def read_serial_number(provider)
  res = {}
  return res unless (serial_number = provider.get_text('./config/ident'))

  res[:serial_number] = serial_number.value
  res
end
read_size(provider) click to toggle source
# File lib/facter/resolvers/freebsd/geom_resolver.rb, line 45
def read_size(provider)
  res = {}
  return res unless (mediasize = provider.get_text('mediasize'))

  mediasize = Integer(mediasize.value)

  res[:size_bytes] = mediasize
  res[:size] = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(mediasize)
  res
end