#!/usr/bin/env ruby # # = Synopsis # # Collect and display facts about the system. # # = Usage # # facter [-d|--debug] [-h|--help] [-v|--version] [fact] [fact] [...] # # = Description # # Collect and display facts about the current system. The library behind # Facter is easy to expand, making Facter an easy way to collect information # about a system from within the shell or within Ruby. # # If no facts are specifically asked for, then all facts will be returned. # # = Options # # debug:: # Enable debugging. # # help:: # Print this help message # # version:: # Print the version and exit. # # = Example # # facter kernel # # = Author # # Luke Kanies # # = Copyright # # Copyright (c) 2006 Reductive Labs, LLC # Licensed under the GNU Public License require 'getoptlong' require 'facter' $haveusage = true begin require 'rdoc/usage' rescue Exception $haveusage = false end $debug = 0 config = nil result = GetoptLong.new( [ "--version", "-v", GetoptLong::NO_ARGUMENT ], [ "--help", "-h", GetoptLong::NO_ARGUMENT ], [ "--debug", "-d", GetoptLong::NO_ARGUMENT ], [ "--yaml", "-y", GetoptLong::NO_ARGUMENT ], [ "--config", "-c", GetoptLong::REQUIRED_ARGUMENT ] ) options = { :yaml => false } result.each { |opt,arg| case opt when "--version" puts "%s" % Facter.version exit when "--yaml" options[:yaml] = true when "--debug" Facter.debugging(1) when "--help" if $haveusage RDoc::usage && exit else puts "No help available unless you have RDoc::usage installed" exit end else $stderr.puts "Invalid option '#{opt}'" exit(12) end } names = [] unless config.nil? File.open(config) { |file| names = file.readlines.collect { |line| line.chomp } } end ARGV.each { |item| names.push item } facts = {} if names.empty? Facter.each { |name,fact| facts[name] = fact } else names.each { |name| begin facts[name] = Facter.value(name) rescue => error STDERR.puts "Could not retrieve %s: #{error}" % name exit 10 end } end if options[:yaml] require 'yaml' puts YAML.dump(facts) exit(0) end facts.sort { |a, b| a[0].to_s <=> b[0].to_s }.each { |name,value| if facts.length == 1 unless value.nil? puts value end else puts "%s => %s" % [name,value] end } # $Id: facter,v 1.1.1.1 2004/03/21 21:06:27 luke Exp $