Puppet Cheat SheetEdit Cheat Sheet
See also Mcollective Puppet - Hiera
Puppet CLI
Bootstrap client
puppet agent -t --server <puppet master> [<options>]
Display facts:
facter # All system facts
facter -p # All system and Puppet facts
facter -y # YAML
facter -j # JSON
facter [-p] <name> # A specific fact
# Examples
facter memoryfree
facter is_virtual processor0
Injecting Facts:
env FACTER_= puppet apply site.pp
Find out effective classes on a node
cat /var/lib/puppet/classes.txt
Find out when which file was modified
cd /var/lib/puppet
for i in $(find clientbucket/ -name paths); do
echo "$(stat -c %y $i | sed 's/\..*//') $(cat $i)";
done | sort -n
Puppet Dry Run:
puppet agent --noop --verbose
Disable agent
puppet agent --disable
puppet agent --disable <info message> # Only recent versions
puppet agent --enable
Executing selective classes
puppet agent --tags Some::Class
Managing Certificates (on master)
puppet cert list
puppet cert list --all
puppet cert sign <name>
puppet cert clean <name> # removes cert
Managing Nodes
puppet node clean <name> # removes node + cert
Managing Modules
puppet module list
puppet module install <name>
puppet module uninstall <name>
puppet module upgrade <name>
puppet module search <name>
Inspecting Resources/Types
puppet describe -l
puppet resource <type name>
# Querying Examples
puppet resource user john.smith
puppet resource service apache
puppet resource mount /data
puppet resource file /etc/motd
puppet resource package wget
# Trigger puppet run from master
puppet kick <name>
puppet kick -p 5 <names> # 5 parallel
Debugging deployment and rules on a local machine. This only makes sense in "one
time" mode running in one of the following variants:
puppetd --test # enable standard debugging options
puppetd --debug # enable full debugging
puppetd --one-time --detailed-exitcodes # Enable exit codes:
# 2=changes applied
# 4=failure
Gepetto: Puppet IDE
puppet - Correctly using Roles and Profiles
Puppet 2/3 Master
Enable debugging: Add to /etc/puppet/rack/config.ru
ARGV << "--debug"
and restart the Passenger.
Puppet DSL
Snippets
notify { 'message': loglevel => 'err' }
Check for file
if file_exists('somefile.txt') == 1 { }
Execute commands (evil!)
exec { "mkdir -p $dir":
command => "/bin/mkdir -p $dir",
creates => $dir
}
Merging Arrays
$result = split(inline_template("<%= (array1+array2).join(',') %>"),',')
Exceptions
fail('This is a parser time error')
Conditions
if $var == 'value' {
}
case $::lsbdistcodename {
'squeeze': {
}
'wheezy', 'jessie': {
}
default {
}
}
ERB Syntax
ERB Tags
<%= ruby code, result inserted %>
<% ruby code, result not inserted %> # use for loops, conditions...
<%- like above, but strips leading+trailings spaces from output -%>
<%# comment %>
<%% # literal <%
%%> # literal %>
Using Variables
<%= @name %> # variable visible in current scope
<%= scope.lookupvar('name') %> # search in all scopes
<%= scope['somewhere::name'] %> # Puppet 3 scope access
Conditions
<% if @name != nil %>
Well, @name is set!
When checking if a variable exists/is set
always do check for nil! Everything else is unsafe.
<% end %>
<% if @name ~ /.* Smith$/ %>
Matches
<% end %>
Augeas
Augeas - in Puppet: Using Puppet with Augeas
augeas { "sshd_config":
changes => [
"set /files/etc/ssh/sshd_config/PermitRootLogin no",
],
}
Testing
Validate manifest
puppet parser validate <manifest>
Validate ERBs
erb -x -T '-' <template> | ruby -c
puppet-rspec: Testing Puppet modules with rspecs
Beaker: Puppet acceptance testing in VMs
Misc
Vim Autoformatting for Puppet
Vim puppet-lint
Atom Editor puppet-lint