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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
#!/usr/bin/env ruby
#
# = Synopsis
#
# Generate a reference for all Puppet types. Largely meant for internal Reductive
# Labs use.
#
# = Usage
#
# puppetdoc [-a|--all] [-h|--help] [-m|--mode <text|pdf|trac> [-r|--reference <[type]|configuration|..>]
#
# = Description
#
# This command generates a restructured-text document describing all installed
# Puppet types or all allowable arguments to puppet executables. It is largely
# meant for internal use and is used to generate the reference document
# available on the Reductive Labs web site.
#
# = Options
#
# all::
# Output the docs for all of the reference types.
#
# help::
# Print this help message
#
# mode::
# Determine the output mode. Valid modes are 'text', 'trac', and 'pdf'. Note that 'trac' mode only works on Reductive Labs servers. The default mode is 'text'.
#
# reference::
# Build a particular reference. Get a list of references by running +puppetdoc --list+.
#
# = Example
#
# $ puppetdoc -r type > /tmp/type_reference.rst
#
# = Author
#
# Luke Kanies
#
# = Copyright
#
# Copyright (c) 2005-2007 Reductive Labs, LLC
# Licensed under the GNU Public License
require 'puppet'
require 'puppet/util/reference'
require 'puppet/network/handler'
require 'getoptlong'
result = GetoptLong.new(
[ "--all", "-a", GetoptLong::NO_ARGUMENT ],
[ "--list", "-l", GetoptLong::NO_ARGUMENT ],
[ "--format", "-f", GetoptLong::REQUIRED_ARGUMENT ],
[ "--mode", "-m", GetoptLong::REQUIRED_ARGUMENT ],
[ "--reference", "-r", GetoptLong::REQUIRED_ARGUMENT ],
[ "--help", "-h", GetoptLong::NO_ARGUMENT ]
)
debug = false
$tab = " "
options = {:references => [], :mode => :text, :format => :to_rest}
Reference = Puppet::Util::Reference
begin
result.each { |opt,arg|
case opt
when "--all"
options[:all] = true
when "--format"
method = "to_%s" % arg
if Reference.method_defined?(method)
options[:format] = method
else
raise "Invalid output format %s" % arg
end
when "--mode"
if Reference.modes.include?(arg)
options[:mode] = arg.intern
else
raise "Invalid output mode %s" % arg
end
when "--list"
puts Reference.references.collect { |r| Reference.reference(r).doc }.join("\n")
exit(0)
when "--reference"
options[:references] << arg.intern
when "--help"
if Puppet.features.usage?
RDoc::usage && exit
else
puts "No help available unless you have RDoc::usage installed"
exit
end
end
}
rescue GetoptLong::InvalidOption => detail
$stderr.puts "Try '#{$0} --help'"
exit(1)
end
if options[:all]
# Don't add dynamic references to the "all" list.
options[:references] = Reference.references.reject do |ref|
Reference.reference(ref).dynamic?
end
end
if options[:references].empty?
options[:references] << :type
end
case options[:mode]
when :trac
options[:references].each do |name|
section = Puppet::Util::Reference.reference(name) or raise "Could not find section %s" % name
unless options[:mode] == :pdf
section.trac
end
end
else
text = ""
if options[:references].length > 1
with_contents = false
else
with_contents = true
end
options[:references].sort { |a,b| a.to_s <=> b.to_s }.each do |name|
section = Puppet::Util::Reference.reference(name)
# Add the per-section text, but with no ToC
text += section.send(options[:format], with_contents)
end
unless with_contents # We've only got one reference
text += Puppet::Util::Reference.footer
end
# Replace the trac links, since they're invalid everywhere else
text.gsub!(/`\w+\s+([^`]+)`:trac:/) { |m| $1 }
if options[:mode] == :pdf
Puppet::Util::Reference.pdf(text)
else
puts text
end
end
|