diff --git a/lib/facter/ipmitool.rb b/lib/facter/ipmitool.rb new file mode 100755 index 0000000..2bf2516 --- /dev/null +++ b/lib/facter/ipmitool.rb @@ -0,0 +1,36 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +Facter.add(:ipmitool, :type => :aggregate) do + # https://puppet.com/docs/puppet/latest/fact_overview.html + confine kernel: 'Linux' + confine is_virtual: false + confine do + Facter::Util::Resolution.which('ipmitool') + end + + chunk(:fru) do + retval = {fru: {}} + ipmitool_output = Facter::Util::Resolution.exec('ipmitool fru print 2>/dev/null') + ipmitool_output.each_line do |line| + next unless line.include?(':') + info = line.split(':', 2) + next if info[1].strip.empty? + key = info[0].strip.tr("\s", "_").downcase + retval[:fru][key] = info[1].strip + end + retval + end + + chunk(:mc_info) do + retval = {mc_info: {'IPMI_Puppet_Service_Recommend' => 'stopped'}} + ipmitool_output = Facter::Util::Resolution.exec('ipmitool mc info 2>/dev/null') + + ipmitool_output.each_line do |line| + info = line.split(':') + retval[:mc_info][info[0].strip] = info[1].strip if info.length == 2 && (info[1].strip != '') + end + retval[:mc_info]['IPMI_Puppet_Service_Recommend'] = 'running' if retval[:mc_info].fetch('Device Available', 'no') == 'yes' + retval + end +end diff --git a/lib/facter/ipmitool_mc_info.rb b/lib/facter/ipmitool_mc_info.rb index 1bf93be..c07b71c 100755 --- a/lib/facter/ipmitool_mc_info.rb +++ b/lib/facter/ipmitool_mc_info.rb @@ -4,21 +4,7 @@ Facter.add(:ipmitool_mc_info) do # https://puppet.com/docs/puppet/latest/fact_overview.html confine kernel: 'Linux' - - retval = {} - retval['IPMI_Puppet_Service_Recommend'] = 'stopped' - - if Facter::Util::Resolution.which('ipmitool') - ipmitool_output = Facter::Util::Resolution.exec('ipmitool mc info 2>/dev/null') - - ipmitool_output.each_line do |line| - info = line.split(':') - retval[info[0].strip] = info[1].strip if info.length == 2 && (info[1].strip != '') - end - retval['IPMI_Puppet_Service_Recommend'] = 'running' if retval.fetch('Device Available', 'no') == 'yes' - end - setcode do - retval + Facter.value('ipmitool')[:mc_info] end end