introduction to puppet scripting
DESCRIPTION
Shawn Smiley, Lead Architect, for Achieve Internet explains Puppet Scripting for SANDCamp 2013TRANSCRIPT
Introduction to Puppet Scripting
Shawn S. SmileyLead ArchitectAchieve [email protected]
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
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/
Quick Demo
Image source: http://gyaniji.blogspot.com/2011/12/demo-of-ad-posting-job.html
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.
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.
What are the pieces?
• Puppet Software• Module Library• Node configuration file• [optional] Puppet Master
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
File Organization
• manifests• site.pp• nodes.pp
• modules• module1• manifests
init.pp
• files• templates• module2
Demo: Folder Structure
Image source: http://gyaniji.blogspot.com/2011/12/demo-of-ad-posting-job.html
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:
type title($arg1) { description of resource state}
To execute an item:
include “title”
type {“title”: }
type {“title”: arg1 => ‘hello’ }
Demo: Simple script
Image source: http://gyaniji.blogspot.com/2011/12/demo-of-ad-posting-job.html
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
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
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,}
Relationships
• Package[“ntp”] -> File[‘ntp.conf’] ~> Service[‘ntpd’]
• “before”, “require” • “subscribe”, “notify”
http://docs.puppetlabs.com/puppet/2.7/reference/lang_relationships.html#relationship-metaparameters
http://docs.puppetlabs.com/puppet/2.7/reference/lang_relationships.html#chaining-arrows
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: }
References
Books• Managing Infrastructure with Puppet
(ISBN: 978-1-4493-0763-9)• Pro Puppet (ISBN: 978-1-4302-3057-1)
Websites• http://www.puppetlabs.com• http://docs.puppetlabs.com/• http://forge.puppetlabs.com/
Q&A