blob: 11a29c6e04ccd228bd1238bb3781b3f6d2403a70 (
plain)
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
|
module Facter
module Application
def self.run(argv)
require 'optparse'
require 'facter'
options = parse(argv)
# Accept fact names to return from the command line
names = argv
# Create the facts hash that is printed to standard out
if names.empty?
facts = Facter.to_hash
else
facts = {}
names.each { |name|
begin
facts[name] = Facter.value(name)
rescue => error
$stderr.puts "Could not retrieve #{name}: #{error}"
exit 10
end
}
end
# Print the facts as YAML and exit
if options[:yaml]
require 'yaml'
puts YAML.dump(facts)
exit(0)
end
# Print the value of a single fact, otherwise print a list sorted by fact
# name and separated by "=>"
if facts.length == 1
if value = facts.values.first
puts value
end
else
facts.sort_by{ |fact| fact.first }.each do |name,value|
puts "#{name} => #{value}"
end
end
rescue => e
if options && options[:trace]
raise e
else
$stderr.puts "Error: #{e}"
exit(12)
end
end
private
def self.parse(argv)
options = {}
OptionParser.new do |opts|
opts.on("-y", "--yaml") { |v| options[:yaml] = v }
opts.on( "--trace") { |v| options[:trace] = v }
opts.on("-d", "--debug") { |v| Facter.debugging(1) }
opts.on("-t", "--timing") { |v| Facter.timing(1) }
opts.on("-p", "--puppet") { |v| load_puppet }
opts.on_tail("-v", "--version") do
puts Facter.version
exit(0)
end
opts.on_tail("-h", "--help") do
begin
require 'rdoc/ri/ri_paths'
require 'rdoc/usage'
puts RDoc.usage
ensure
exit
rescue LoadError
$stderr.puts "No help available unless your RDoc has RDoc.usage"
exit(1)
rescue => e
$stderr.puts "fatal: #{e}"
exit(1)
end
end
end.parse!
options
rescue OptionParser::InvalidOption => e
$stderr.puts e.message
exit(12)
end
def self.load_puppet
require 'puppet'
Puppet.parse_config
# If you've set 'vardir' but not 'libdir' in your
# puppet.conf, then the hook to add libdir to $:
# won't get triggered. This makes sure that it's setup
# correctly.
unless $LOAD_PATH.include?(Puppet[:libdir])
$LOAD_PATH << Puppet[:libdir]
end
rescue LoadError => detail
$stderr.puts "Could not load Puppet: #{detail}"
end
end
end
|