puppet camp boston 2014: greenfield puppet: getting it right from the start (beginner)
DESCRIPTION
Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner) given by David Danzilio, Constant ContactTRANSCRIPT
![Page 1: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/1.jpg)
Greenfield PuppetDavid Danzilio
@djdanzilio
![Page 2: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/2.jpg)
$(whoami)
![Page 3: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/3.jpg)
What’s this all about?
![Page 4: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/4.jpg)
A collection of wisdom that I wish I had available when I first started using Puppet
![Page 5: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/5.jpg)
This could change in future releases
![Page 6: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/6.jpg)
Don’t just take my word for it
![Page 7: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/7.jpg)
![Page 8: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/8.jpg)
– Wikipedia
“a greenfield is a project that lacks any constraints imposed by prior work”
![Page 9: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/9.jpg)
![Page 10: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/10.jpg)
A (not so) hypothetical scenario…
![Page 11: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/11.jpg)
Department of BasketweavingFU
Foo University
![Page 12: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/12.jpg)
class apache {! package { [‘apache2’, ‘rails’, ‘libapache2-mod-passenger’]:! ensure => present,! }! file { ‘/etc/apache2/sites-enabled/bw-app.conf’:! ensure => file,! source => ‘puppet:///apache/bw-app.conf',! require => Package[‘apache2’],! }! file { ‘/var/www/bw-app’:! ensure => directory,! owner => www-data,! group => www-data,! source => ‘puppet:///apache/bw-app',! recurse => true,! require => File[‘/etc/apache2/sites-enabled/bw-app.conf’]! }! service { ‘apache2’:! ensure => running,! require => [! File[‘/var/www/bw-app’],! Package[’rails’, ‘libapache2-mod-passenger’],! ]! }!}
![Page 13: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/13.jpg)
I want to use Graphitefor all my!
basket data
![Page 14: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/14.jpg)
OH NOES!
![Page 15: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/15.jpg)
![Page 16: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/16.jpg)
–Doug McIlroy
“Write programs that do one thing and do it well. Write programs to work together.”
![Page 17: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/17.jpg)
Modules
![Page 18: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/18.jpg)
Don’t write modules unless you absolutely have to!
![Page 19: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/19.jpg)
![Page 20: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/20.jpg)
Check the Forge first
![Page 21: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/21.jpg)
2,617
![Page 22: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/22.jpg)
Don’t customize Forge modules!
![Page 23: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/23.jpg)
Use the Roles and Profiles pattern
![Page 24: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/24.jpg)
Roles and Profiles
![Page 25: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/25.jpg)
Craig Dunn’s blog post: “Designing Puppet – Roles
and Profiles”
![Page 26: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/26.jpg)
A node includes one role
![Page 27: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/27.jpg)
node db01.example.com { include role::db::server } !
node db02.example.com { include role::db::server::dev }
![Page 28: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/28.jpg)
A role includes one or more profiles
![Page 29: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/29.jpg)
class role::base { include profile::base } !class role::db::server inherits role::base { include profile::mysql include profile::application::database } !class role::db::server::dev inherits role::base { include profile::mysql include profile::percona }
![Page 30: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/30.jpg)
A profile manages modules
![Page 31: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/31.jpg)
class profile::mysql { ! $mysql_version = hiera(‘mysql_version’) ! class { ‘mysql::server’: package_ensure => $mysql_version } ! class { ‘mysql::backup’: } class { ‘nagios::mysql’: } !}
![Page 32: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/32.jpg)
Like MVC for Puppet
![Page 33: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/33.jpg)
The Forge
![Page 34: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/34.jpg)
Look for modules with lots of downloads and recent
updates
![Page 35: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/35.jpg)
Lots of downloadsRecent update
![Page 36: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/36.jpg)
Do some background research on the author of the
module
![Page 37: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/37.jpg)
Give priority to modules written by Puppet Labs
![Page 38: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/38.jpg)
Be weary of modules with strange dependencies
![Page 39: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/39.jpg)
WHY!??!?!
![Page 40: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/40.jpg)
Don’t use a module without vetting it
![Page 41: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/41.jpg)
![Page 42: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/42.jpg)
Puppet Deployment
![Page 43: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/43.jpg)
Have a solid deployment pipeline
![Page 44: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/44.jpg)
![Page 45: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/45.jpg)
Use librarian-puppet or r10k to deploy your code to your
Puppet masters
![Page 46: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/46.jpg)
Reliable metadata is key to a successful Puppet deployment
![Page 47: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/47.jpg)
$ cat /etc/facter/facts.d/metadata.json { "datacenter": "Boston", "rack": "R23", "role": "webserver", "cluster": "C89" }
![Page 48: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/48.jpg)
Use environments to keep your nodes safe
![Page 49: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/49.jpg)
Understand the lifecycle of a module
![Page 50: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/50.jpg)
Use Hiera from the start
![Page 51: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/51.jpg)
Don’t get too crazy with your hierarchy
![Page 52: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/52.jpg)
:hierarchy: - “%{::app}/%{::environment}/%{::datacenter}/%{::fqdn}” - “%{::app}/%{::environment}/%{::datacenter}” - “%{::app}/%{::environment}” - “%{::app}” - “%{::cluster}/%{::environment}/%{::datacenter}/%{::fqdn}” - “%{::cluster}/%{::environment}/%{::datacenter}” - “%{::cluster}/%{::environment}” - “%{::cluster}” - “%{::environment}/%{::datacenter}/%{::fqdn}” - “%{::environment}/%{::datacenter}” - “%{::environment}” - “%{::realm}/%{::region}/%{::datacenter}/%{::fqdn}” - “%{::realm}/%{::region}/%{::datacenter}” - “%{::realm}/%{::region}” - “%{::realm}” - “%{::region}” - “%{::datacenter}/%{::rack}/%{::cluster}/%{::fqdn}” - “%{::datacenter}/%{::rack}/%{::cluster}” - “%{::datacenter}/%{::rack}” - “%{::datacenter}” - “%{::rack}” - “%{::cluster}”
![Page 53: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/53.jpg)
Puppet Development
![Page 54: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/54.jpg)
Puppet code is real code
![Page 55: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/55.jpg)
Puppet is Ruby
![Page 56: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/56.jpg)
![Page 57: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/57.jpg)
Puppet modules need a design specification
![Page 58: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/58.jpg)
rspec-puppet for TDD
![Page 59: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/59.jpg)
Design modules with other people in mind
![Page 60: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/60.jpg)
Fail fast
![Page 61: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/61.jpg)
fail(“${::osfamily} is not supported by this module.”)
![Page 62: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/62.jpg)
Public classes should expose a stable API
![Page 63: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/63.jpg)
Semantic Versioning is your friend
![Page 64: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/64.jpg)
Major.Minor.Patch
![Page 65: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/65.jpg)
X.0.0
![Page 66: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/66.jpg)
0.X.0
![Page 67: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/67.jpg)
0.0.X
![Page 68: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/68.jpg)
Remember the UNIX philosophy
![Page 69: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/69.jpg)
Share your custom modules with the community!
![Page 70: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/70.jpg)
Manage your dependencies with care
![Page 71: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/71.jpg)
Keep artifacts out of your Puppet modules
![Page 72: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/72.jpg)
Embedding data makes your modules less modular
![Page 73: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/73.jpg)
class foo ( $pkg_version = $foo::params::pkg_version, $pkg_name = $foo::params::pkg_name, ) inherits foo::params { ! ... !}
![Page 74: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/74.jpg)
Keep business logic out of templates
![Page 75: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/75.jpg)
<% if @app == ‘foo’ %> ... <% else %> ... <% end %>
![Page 76: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/76.jpg)
$template = ? $app { ‘foo’ => ‘foo.conf.erb’, default => ‘generic.conf.erb’, } !file { ‘/path/to/app.conf’: ensure => file, content => template(“module/${template}”), }
![Page 77: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/77.jpg)
Standard Library
![Page 78: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/78.jpg)
Use the standard library to level-up your modules
![Page 79: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/79.jpg)
Avoid duplicate resources with ensure_packages and ensure_resource
![Page 80: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/80.jpg)
package { ‘apache2’: ensure => present, }
![Page 81: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/81.jpg)
ensure_packages([‘apache2’])
![Page 82: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/82.jpg)
Validate inputs with validate_array, validate_bool, validate_hash, validate_re, and validate_string
![Page 83: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/83.jpg)
Protect private classes with private
![Page 84: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/84.jpg)
![Page 85: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/85.jpg)
Modules should be easy to use and hard to abuse
![Page 86: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/86.jpg)
StyleSubstance
![Page 87: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/87.jpg)
Style is important
![Page 88: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/88.jpg)
puppet-lint
![Page 89: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/89.jpg)
puppet-syntax
![Page 90: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/90.jpg)
source 'https://rubygems.org' !
gem 'rake' gem 'puppet' gem 'puppet-lint' gem 'puppet-syntax'
![Page 91: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/91.jpg)
require 'puppet-lint/tasks/puppet-lint' require 'puppet-syntax/tasks/puppet-syntax' !exclude_paths = [ "pkg/**/*", "vendor/**/*", "spec/**/*", ] !PuppetLint.configuration.ignore_paths = exclude_paths PuppetSyntax.exclude_paths = exclude_paths
![Page 92: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/92.jpg)
$ bundle install Fetching gem metadata from https://rubygems.org/........ Resolving dependencies... Installing rake 10.3.2 Installing CFPropertyList 2.2.8 Installing facter 2.1.0 Installing json_pure 1.8.1 Installing hiera 1.3.4 Installing rgen 0.6.6 Installing puppet 3.6.2 Installing puppet-lint 0.3.2 Installing puppet-syntax 1.3.0 Using bundler 1.6.2 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
![Page 93: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/93.jpg)
$ bundle exec rake -T rake lint # Run puppet-lint rake syntax # Syntax check Puppet manifests and templates rake syntax:hiera # Syntax check Hiera config files rake syntax:manifests # Syntax check Puppet manifests rake syntax:templates # Syntax check Puppet templates
![Page 94: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/94.jpg)
Documentation is important
![Page 95: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/95.jpg)
![Page 96: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/96.jpg)
![Page 97: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/97.jpg)
We’re all Keynesians now.developers
![Page 98: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/98.jpg)
Keeping Up
![Page 99: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/99.jpg)
Puppet is evolving really fast
![Page 100: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/100.jpg)
There is a fantastic community out there
![Page 101: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/101.jpg)
Pay attention to thought leaders
![Page 102: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/102.jpg)
![Page 103: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/103.jpg)
Refactor your code as the language evolves
![Page 104: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/104.jpg)
![Page 105: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/105.jpg)
Contribute to modules on the Forge!
![Page 106: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/106.jpg)
Questions?
![Page 107: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/107.jpg)
Thank you!
![Page 108: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/108.jpg)
Image Credits• http://officeimg.vo.msecnd.net/en-us/images/MP900430517.jpg • http://imgur.com/gallery/YNI5wud • http://www.reddit.com/r/funny/comments/1jgxtq/new_york_and_boston_the_difference/ • http://openclipart.org/detail/195046/ubuntu-geek-by-stephencuyos-195046 • http://design.ubuntu.com/downloads?metadata=element-logo+brand-ubuntu • http://commons.wikimedia.org/wiki/File:Ruby_on_Rails-logo.png • https://github.com/phusion/passenger • http://kaleidos.net/weapons/apache-webserver/ • http://puppetlabs.com/company/news/media-kit • http://copiousnotes.bloginky.com/2014/06/17/summer-classic-dr-strangelove-2/ • http://imgur.com/iWKad22 • http://cheezburger.com/6230961920 • http://www.craigdunn.org/stuff/puppet_big.png • http://www.quickmeme.com/meme/362un7 • http://programmerryangosling.tumblr.com/image/22790837971 • http://www.quickmeme.com/meme/3sogf9 • http://wall.alphacoders.com/big.php?i=238266
![Page 109: Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (Beginner)](https://reader033.vdocuments.mx/reader033/viewer/2022060108/554f3cdeb4c905471e8b4ae2/html5/thumbnails/109.jpg)
Further Reading• http://www.craigdunn.org/2012/05/239/ • https://www.youtube.com/user/PuppetLabsInc/playlists • https://github.com/puppetlabs/puppetlabs-stdlib • http://continuousdelivery.com • http://www.slideshare.net/PuppetLabs/tddforpuppet • http://www.slideshare.net/PuppetLabs/roles-rofiles • http://www.slideshare.net/PuppetLabs/steamlining-
puppetdevelopmentpuppetconfny2014 • http://garylarizza.com/blog/2013/12/08/when-to-hiera/ • http://www.devco.net/archives/2013/12/09/the-problem-with-params-pp.php • http://www.devco.net/archives/2013/12/08/better-puppet-modules-using-hiera-data.php • http://puppet-lint.com • https://github.com/gds-operations/puppet-syntax