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
import 'nodes.pp'
puppet apply site.pp

Packages

save in node.pp
node 'danodename' {  
  package { 'nginx':
    ensure => installed,
  }
}
save in site.pp
import 'nodes.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