Skip to content

Commit

Permalink
(PUP-12075) Render puppet man page correctly
Browse files Browse the repository at this point in the history
Previously, the man/man8/puppet.8 man page wasn't formatted correctly
with each subcommand and summary on a new line. This was because `puppet
--help` doesn't output ronn format, just raw text. So generate
`puppet.8.ronn` in valid ronn format so that it can be converted to
roff. Use `man --local-file man/man8/puppet.8` to verify the results.

Also don't blindly run `<bin>/<app> --help` for every app. That's left
over from when puppet had multiple bin stubs.
  • Loading branch information
joshcooper committed Aug 29, 2024
1 parent 0bf9a62 commit ef2fc04
Show file tree
Hide file tree
Showing 3 changed files with 165 additions and 16 deletions.
129 changes: 121 additions & 8 deletions man/man8/puppet.8
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,138 @@
.TH "PUPPET" "8" "August 2024" "Puppet, Inc." "Puppet manual"
.
.SH "NAME"
\fBpuppet\fR
\fBpuppet\fR \- an automated configuration management tool
.
.SH "SYNOPSIS"
\fBpuppet\fR \fIsubcommand\fR [options] \fIaction\fR [options]
.
.SH "DESCRIPTION"
Puppet, an automated administrative engine for your Linux, Unix, and Windows systems, performs administrative tasks (such as adding users, installing packages, and updating server configurations) based on a centralized specification\.
.
.SH "COMMANDS"
.
.SS "Common"
\fBapply\fR
.
.br
\~\~\~\~Apply Puppet manifests locally
.
.P
\fBagent\fR
.
.br
\~\~\~\~The puppet agent daemon
.
.P
\fBconfig\fR
.
.br
\~\~\~\~Interact with Puppet\'s settings\.
.
.P
\fBhelp\fR
.
.br
\~\~\~\~Display Puppet help\.
.
.P
\fBlookup\fR
.
.br
\~\~\~\~Interactive Hiera lookup
.
.P
\fBmodule\fR
.
.br
\~\~\~\~Creates, installs and searches for modules on the Puppet Forge\.
.
.P
\fBresource\fR
.
.br
\~\~\~\~The resource abstraction layer shell
.
.SS "Specialized"
\fBcatalog\fR
.
.br
\~\~\~\~Compile, save, view, and convert catalogs\.
.
.P
\fBdescribe\fR
.
.br
\~\~\~\~Display help about resource types
.
.P
\fBdevice\fR
.
.br
\~\~\~\~Manage remote network devices
.
.P
\fBdoc\fR
.
.br
\~\~\~\~Generate Puppet references
.
.P
Usage: puppet \fIsubcommand\fR [options] \fIaction\fR [options]
\fBepp\fR
.
.br
\~\~\~\~Interact directly with the EPP template parser/renderer\.
.
.P
Available subcommands:
\fBfacts\fR
.
.br
\~\~\~\~Retrieve and store facts\.
.
.P
\fBfilebucket\fR
.
.br
\~\~\~\~Store and retrieve files in a filebucket
.
.P
Common:
\fBgenerate\fR
.
.br
agent The puppet agent daemon apply Apply Puppet manifests locally config Interact with Puppet\'s settings\. help Display Puppet help\. lookup Interactive Hiera lookup module Creates, installs and searches for modules on the Puppet Forge\. resource The resource abstraction layer shell
\~\~\~\~Generates Puppet code from Ruby definitions\.
.
.P
Specialized:
\fBnode\fR
.
.br
catalog Compile, save, view, and convert catalogs\. describe Display help about resource types device Manage remote network devices doc Generate Puppet references epp Interact directly with the EPP template parser/renderer\. facts Retrieve and store facts\. filebucket Store and retrieve files in a filebucket generate Generates Puppet code from Ruby definitions\. node View and manage node definitions\. parser Interact directly with the parser\. plugin Interact with the Puppet plugin system\. script Run a puppet manifests as a script without compiling a catalog ssl Manage SSL keys and certificates for puppet SSL clients
\~\~\~\~View and manage node definitions\.
.
.P
\fBparser\fR
.
.br
\~\~\~\~Interact directly with the parser\.
.
.P
\fBplugin\fR
.
.br
\~\~\~\~Interact with the Puppet plugin system\.
.
.P
\fBscript\fR
.
.br
\~\~\~\~Run a puppet manifests as a script without compiling a catalog
.
.P
\fBssl\fR
.
.br
\~\~\~\~Manage SSL keys and certificates for puppet SSL clients
.
.SH "SEE ALSO"
See \fBpuppet help <subcommand>\fR for help on a specific subcommand\.
.
.P
See \'puppet help \fIsubcommand\fR \fIaction\fR\' for help on a specific subcommand action\. See \'puppet help \fIsubcommand\fR\' for help on a specific subcommand\. Puppet v8\.9\.0
See \fBpuppet help <subcommand> <action>\fR for help on a specific subcommand action\.
34 changes: 34 additions & 0 deletions rakelib/man/puppet.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
puppet(8) - an automated configuration management tool
=========

## SYNOPSIS

`puppet` <subcommand> [options] <action> [options]

## DESCRIPTION

Puppet, an automated administrative engine for your Linux, Unix, and Windows systems, performs administrative tasks
(such as adding users, installing packages, and updating server configurations) based on a centralized specification.

## COMMANDS

### Common

<% common.each do |appname, summary, _| -%>
`<%= appname.to_s %>`<br>
&nbsp;&nbsp;&nbsp;&nbsp;<%= summary %>
<% end -%>

### Specialized

<% specialized.each do |appname, summary, _| -%>
`<%= appname.to_s %>`<br>
&nbsp;&nbsp;&nbsp;&nbsp;<%= summary %>
<% end -%>

## SEE ALSO
See `puppet help <subcommand>` for help on a specific subcommand.

See `puppet help <subcommand> <action>` for help on a specific subcommand action.
18 changes: 10 additions & 8 deletions rakelib/manpages.rake
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ task :gen_manpages do
Puppet.initialize_settings
helpface = Puppet::Face[:help, '0.0.1']

bins = Dir.glob(%w{bin/*})
non_face_applications = helpface.legacy_applications
faces = Puppet::Face.faces.map(&:to_s)
apps = non_face_applications + faces
Expand Down Expand Up @@ -36,13 +35,16 @@ task :gen_manpages do
FileUtils.mv("./man/man5/puppetconf.5", "./man/man5/puppet.conf.5")
FileUtils.rm("./man/man5/puppetconf.5.ronn")

# Create LEGACY binary man pages (i.e. delete me for 2.8.0)
bins.each do |bin|
b = bin.gsub( /^s?bin\//, "")
%x{RUBYLIB=./lib:$RUBYLIB #{bin} --help > ./man/man8/#{b}.8.ronn}
%x{#{ronn} #{ronn_args} ./man/man8/#{b}.8.ronn}
FileUtils.rm("./man/man8/#{b}.8.ronn")
end
# Create puppet binary man page
# puppet --help outputs raw text, not ronn, so trying to convert that to roff
# fails miserably. Render valid ronn so we can convert to roff
common = helpface.common_app_summaries
specialized = helpface.specialized_app_summaries
template_binding = OpenStruct.new(common: common, specialized: specialized).instance_eval {binding}
content = ERB.new(File.read(File.join(__dir__, 'man/puppet.erb')), trim_mode: '-').result(template_binding)
File.write("./man/man8/puppet.8.ronn", content)
%x{#{ronn} #{ronn_args} ./man/man8/puppet.8.ronn}
FileUtils.rm("./man/man8/puppet.8.ronn")

apps.each do |app|
%x{RUBYLIB=./lib:$RUBYLIB bin/puppet help #{app} --ronn > ./man/man8/puppet-#{app}.8.ronn}
Expand Down

0 comments on commit ef2fc04

Please sign in to comment.