class Facter::Resolvers::Xen

Constants

XEN_COMMANDS
XEN_PATH
XEN_TOOLSTACK

Private Class Methods

detect_domains() click to toggle source
# File lib/facter/resolvers/xen.rb, line 41
def detect_domains
  domains = []
  xen_command = find_command
  return unless xen_command

  output = Facter::Core::Execution.execute("#{xen_command} list", logger: log)
  return if output.empty?

  output.each_line do |line|
    next if /Domain-0|Name/.match?(line)

    domain = line.match(/^([^\s]*)\s/)
    domain = domain&.captures&.first
    domains << domain if domain
  end

  domains
end
detect_xen(fact_name) click to toggle source
# File lib/facter/resolvers/xen.rb, line 19
def detect_xen(fact_name)
  @fact_list[:vm] = detect_xen_type
  @fact_list[:privileged] = privileged?(@fact_list[:vm])
  @fact_list[:domains] = detect_domains

  @fact_list[fact_name]
end
detect_xen_type() click to toggle source
# File lib/facter/resolvers/xen.rb, line 27
def detect_xen_type
  xen_type = 'xen0' if File.exist?('/dev/xen/evtchn')
  if !xen_type && (File.exist?('/proc/xen') || (File.exist?('/dev/xvda1') && !File.symlink?('/dev/xvda1')))
    xen_type = 'xenu'
  end

  xen_type
end
find_command() click to toggle source
# File lib/facter/resolvers/xen.rb, line 60
def find_command
  num_stacks = 0
  XEN_COMMANDS.each do |command|
    num_stacks += 1 if File.exist?(command)
  end

  return XEN_TOOLSTACK if num_stacks > 1 && File.exist?(XEN_TOOLSTACK)

  XEN_COMMANDS.each { |command| return command if File.exist?(command) }

  nil
end
post_resolve(fact_name, _options) click to toggle source
# File lib/facter/resolvers/xen.rb, line 15
def post_resolve(fact_name, _options)
  @fact_list.fetch(fact_name) { detect_xen(fact_name) }
end
privileged?(xen_type) click to toggle source
# File lib/facter/resolvers/xen.rb, line 36
def privileged?(xen_type)
  content = Facter::Util::FileHelper.safe_read(XEN_PATH, nil)
  content&.strip == 'control_d' || xen_type == 'xen0'
end