Puppet Cheat Sheet
A lot of this is taken from Puppet 3 Beginner's Guide by John Arundel
Table of Contents
Check puppet version
puppet --version
file content manifest - site.pp
save in site.pp
file { '/tmp/dafile':
content => "datext\n",
}
puppet apply site.pp
file content manifest - node.pp - for multiple nodes
save in node.pp
node 'danodename' {
file { '/tmp/dafile':
content => "datext\n",
}
}
save in site.pp
puppet apply site.pp
Packages
save in node.pp
node 'danodename' {
package { 'nginx':
ensure => installed,
}
}
save in site.pp
specific version
package { 'nginx':
ensure => '1.1.18-1ubuntu0.1',
}
Removing packages
package { 'apache2.0-common':
ensure => absent,
}
Updating packages
package { 'puppet':
ensure => latest,
}
Modules
everything belonging to a particular module/application
save in modules/nginx/manifests/init.pp
class nginx {
package { 'nginx':
ensure => installed,
}
}
save in manifests/nodes.pp
node 'danodename' {
include nginx
}
sudo puppet apply /etc/manifests/site.pp --modulepath=/etc/puppet/modules/
Services
# Manage nginx webserver
class nginx {
package { 'apache2.2-common':
ensure => absent,
}
#make sure apache uninstalled before nginx installed
package { 'nginx':
ensure => installed,
require => Package['apache2.2-common'],
}
#make sure nginx installed before you try to run it
service { 'nginx':
ensure => running,
require => Package['nginx'],
}
}
Can't have circular requires...
Starting a service at boot time
service { 'nginx':
ensure => running,
enable => true, #false disables auto-startup
}
Services and Status command
if status command not supported
(e.g. sudo service nginx status)
try hasstatus and/or pattern
service { 'my-service':
ensure => running,
hasstatus => false, #look for it in ps status list
pattern => 'ruby myservice.rb', #optional - svc name not accurate look for this
status => 'grep running /var/lib/status.txt', #optional - return val 0 = running
}
Specifying how to start/stop/restart svc
service { 'ssh':
ensure => running,
restart => '/usr/sbin/service ssh reload', #attribute could be start or stop also
}
Deploying file via puppet dir
put in modules/nginx/manifests/init.pp
class nginx {
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
require => Package['nginx'],
}
file { '/etc/nginx/sites-enabled/default':
#copy to the above path
source => 'puppet:///modules/nginx/dafile.conf',
#copy the above file from modules/nginx/file/dafile.conf
notify => Service['nginx'],
#tell nginx to restart
}
}
Setting up a Puppet master
https://www.digitalocean.com/community/tutorials/how-to-install-puppet-to-manage-your-server-infrastructure
Install NTP
sudo ntpdate pool.ntp.org
sudo apt-get update && sudo apt-get -y install ntp
sudo vi /etc/ntp.conf
server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org
sudo service ntp restart
Install Puppet Master
http://www.unixmen.com/install-puppet-server-centos-7/
rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-11.noarch.rpm
yum install -y puppet-server
systemctl start puppetmaster.service
# Set Puppet Master to run on startup
puppet resource service puppetmaster ensure=running enable=true
Download apache (or other web server) and necessary dependencies
yum install -y httpd httpd-devel mod_ssl ruby-devel rubygems gcc-c++ curl-devel zlib-devel make automake openssl-devel
Install Rack/Passenger
gem install rack passenger
#If you get errors on ruby version:
curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm install 2.2
rvm use 2.2 --default
passenger-install-apache2-module
passenger-install-apache2-module
Default directories
#/bin/bash
export PUPPETMANIFESTS=/etc/puppet/manifests
export MODULEPATH=/etc/puppet/modules