1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#!/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 ],
[ "--config", "-c", GetoptLong::REQUIRED_ARGUMENT ]
)
result.each { |opt,arg|
case opt
when "--version"
puts "%s" % Facter.version
exit
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
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 $
|