2. What is puppet?
“Puppet is IT automation software
that helps system administrators
manage infrastructure throughout its
lifecycle, from provisioning and
configuration to patch management
and compliance.”
Source: www.puppetlabs.com/puppet/what-is-puppet
3. What does that mean?
• You can setup a new server in
minutes vs. hours!
• You can be sure your server
configurations are consistent.
• You can easily deploy
configuration changes to
multiple servers.
Image Source: http://www.forbes.com/sites/kenkrogue/2012/09/07/the-most-important-interview-question-never-asked/
5. What happened?
• Puppet analyzed the scripts to build a picture of what the
server should look like.
• Puppet then compared that to what the server actually
looks like.
• It then generates and executes scripts to make the server
configuration match that in the puppet scripts.
6. How vs. What
• Why is it better to describe what a system looks like
rather than how to configure a system?
• When you describe what a system looks like, you can
repeatedly rerun the process without fear of breaking the
system.
• Can build platform independent scripts.
7. What are the pieces?
• Puppet Software
• Module Library
• Node configuration file
• [optional] Puppet Master
8. Modules
What are they?
• Self-contained packages that describe an aspect of a
system (e.g. “Apache” or “MySQL”)
Are there existing packages I can leverage?
• http://forge.puppetlabs.com
• http://github.com
Where do I put them?
• /usr/share/puppet/modules
• /etc/puppet/modules
11. Basic Syntax
• Follows basic Ruby language syntax.
• Does not fully implement the Ruby language though, only
a subset is allowed in your puppet files.
To define an item: To execute an item:
type title($arg1) { include “title”
description of resource state
} type {“title”: }
type {“title”:
arg1 => ‘hello’
}
13. Resource Types
• Are puppet libraries that are used to interact with the
system.
• Puppet comes with a wide range of resource types:
• exec
• package
• file
• service
• notify
Full list:
http://docs.puppetlabs.com/references/latest/type.html
14. Facter
What are facts?
• Global variables with information about the system that
the script is running on.
How do I see the available variables?
• facter -p
How do I use them?
• $::variable_name
15. Templates
• Templates are files that use a simple markup language to
insert dynamic values.
• Templates have an .erb extension
• Typically used with the File resource. e.g.:
file {'ntp.conf':
path => '/etc/ntp.conf',
ensure => file,
content => template('ntp/ntp.conf.erb'),
owner => root,
mode => 0644,
}
17. User-Defined Types
• Similar to functions in most languages.
• Only way to do iterations currently.
• Call the Type with an array.
define apache::vhost() {
$docroot = “/var/www/${name}”
}
$sites = [‘site1’, ‘site2’]
apache::vhost {$sites: }