What's new in Puppet 3.0
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

What's new in Puppet 3.0

on

  • 540 views

My talk from PuppetConf '12.

My talk from PuppetConf '12.
Video: http://www.youtube.com/watch?v=8h2PbdFi0OU

Statistics

Views

Total Views
540
Views on SlideShare
540
Embed Views
0

Actions

Likes
0
Downloads
9
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • Hi. I’m Eric aka eric0. \nproduct owner for opensource\ncfengine since 98, in awesome but failed startups\npuppet user since 0.24 at apple, an awesome sucessful non-startup\npuppet employee since june, an awesome hopefully successful startup\nlove OSS, commited to puppet becoming a real platform that enterprise and others build on\n
  • TELLY.\nOriginally short for TELEVISION, he was totally obsessed with watching TV, with the eyeball spin & everything\nSource: http://muppet.wikia.com/wiki/Telly_Monster\n\n
  • but according to the Muppet Wiki -- what, you dont read the Muppet wiki? -- the fact that he watched TV 3 inches from the screen was a bad example for the children.\n“Worrying, easily frustrated -- but an expert on TV and computers” COINCIDENCE?\nso they took away the TV and gave him triangles. 3 sides. Puppet 3. Coincidence? \nSource: http://muppet.wikia.com/wiki/Telly_Monster\n\n
  • this slide’s alternate title was ‘give edward tufte an aneurysm’\nroughly yearly releases until the Great Renaming in 2010 introduced roughly 10x more puppet\nsep 2009 0.25.0 introduced REST instead of XML-RPC\njuly 2010 2.6.0 had run stages, param classes, complex data structures, and lots of syntax\njune 2011 2.7.0 introduced greater API-zation , through faces and exposing more functionality like certificates through REST\nsignificant new functionality through 2.7 series, including some surprises in minor versions.\nup to 2.7.20 now.\nnext up is 3, released this week.\n\n
  • github graph of project growth from the start of time.\ngiant spike in july 2011 was reformatting for two space indentation.\n\n
  • Started releasing RCs in May 2012, w/ 1,2,3 by June 1\n(I started June 27)\nQuiet until July when Stahnke posted that we were reverting from RC to development due to performance and quality problems. \n“stop the line”\nRC4 Aug 24\nRC5 Aug 29\nRC6 Sep 10\nRC7 Sep 20\nRelease Sep 25\nso what happened?\n
  • From http://www.keepcalm-o-matic.co.uk/p/keep-calm-and-ooh-shiny/\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • enabled by default to ease bootstrapping\nlazy-loaded instead of download-then-load\n`gem install` just works for Ruby extensions\nmore work to do on the code distribution story: puppet modules as 1st class distribution (package provider) and good OS citizens (reducy RUBYLIB craziness)\n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont\nsolaris - smf was kinda sad, zones, pkgs meh. rahul and stefan schulte brought some much needed love to sol 11 packaging, zones -- #7175 “zones borken since 0.24.8”\nashley penney --variants like openindiana into osfamily. \n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • whos used hiera? heard of hiera? simple hierarchical data store for separating code from data\narri wrote it, available as add-ons since last june.\nsimplified install--4 packages to 2--auto dependencies\nsimplified usage w/ data bindings -- kelsey’s work\n
  • if !\ninside class foo, ‘include ::bar’ used to get to foo::bar.\nquick WAT break.\n
  • if !\ninside class foo, ‘include ::bar’ used to get to foo::bar.\nquick WAT break.\n
  • if !\ninside class foo, ‘include ::bar’ used to get to foo::bar.\nquick WAT break.\n
  • if !\ninside class foo, ‘include ::bar’ used to get to foo::bar.\nquick WAT break.\n
  • if !\ninside class foo, ‘include ::bar’ used to get to foo::bar.\nquick WAT break.\n
  • \n
  • Gary Bernhardt on language inconsistencies at destroyallsoftware.com\n
  • Gary Bernhardt on language inconsistencies at destroyallsoftware.com\n
  • Gary Bernhardt on language inconsistencies at destroyallsoftware.com\n
  • Gary Bernhardt on language inconsistencies at destroyallsoftware.com\n
  • Gary Bernhardt on language inconsistencies at destroyallsoftware.com\n
  • Gary Bernhardt on language inconsistencies at destroyallsoftware.com\n
  • Gary Bernhardt on language inconsistencies at destroyallsoftware.com\n
  • this one is preserved but i’m still not convinced it’s right. \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n\nhttp://en.wikipedia.org/wiki/File:Assorted_United_States_coins.jpg\n\n\n
  • \n
  • \n
  • from Greg Dallavalle at WolfNet -- early adopter because he was hurting under 2.7 and had to add a bunch more resources -- 40K managed resources -- upgraded to telly RC6 and boom, all his machines crashed. i mean, it started using less cpu.\n
  • from adrien in ops, both compile and apply are way down\ndaniel pittman did a lot of work on this area\n- store catalog on agent in json not yaml\n- avoid needless object creation\n- reduce stat() call\n
  • we’re deprecating support for ruby 1.8.5 in telly.\nRHEL5 platform can use a drop-in 1.8.7 package backported from el6\n
  • we’re deprecating support for ruby 1.8.5 in telly.\nRHEL5 platform can use a drop-in 1.8.7 package backported from el6\n
  • we’re deprecating support for ruby 1.8.5 in telly.\nRHEL5 platform can use a drop-in 1.8.7 package backported from el6\n
  • takeaway: qualify your variables. local scope works, top-level works -- \n
  • takeaway: qualify your variables. local scope works, top-level works -- \n
  • takeaway: qualify your variables. local scope works, top-level works -- \n
  • takeaway: qualify your variables. local scope works, top-level works -- \n
  • takeaway: qualify your variables. local scope works, top-level works -- \n
  • takeaway: qualify your variables. local scope works, top-level works -- \n
  • takeaway: qualify your variables. local scope works, top-level works -- \n
  • takeaway: qualify your variables. local scope works, top-level works -- \n
  • takeaway: qualify your variables. local scope works, top-level works -- \n
  • \n
  • \n
  • - want to knock down the remaining top watched bugs\n- fixes for ‘platform’ stuff as luke mentioned -- untangling fundamental complexity by paying down tech debt on settings and code loading, building APIs\n- slimmer core - nagios types need to go--things that can be modularised should be. packaged puppet will contain a set of core modules but they won’t be in the same git repo\n- themes : error messages, type and provider split-up\n- but driven by USER TESTING so we fix the important problems not JUST the urgent ones.\n
  • - want to knock down the remaining top watched bugs\n- fixes for ‘platform’ stuff as luke mentioned -- untangling fundamental complexity by paying down tech debt on settings and code loading, building APIs\n- slimmer core - nagios types need to go--things that can be modularised should be. packaged puppet will contain a set of core modules but they won’t be in the same git repo\n- themes : error messages, type and provider split-up\n- but driven by USER TESTING so we fix the important problems not JUST the urgent ones.\n
  • - want to knock down the remaining top watched bugs\n- fixes for ‘platform’ stuff as luke mentioned -- untangling fundamental complexity by paying down tech debt on settings and code loading, building APIs\n- slimmer core - nagios types need to go--things that can be modularised should be. packaged puppet will contain a set of core modules but they won’t be in the same git repo\n- themes : error messages, type and provider split-up\n- but driven by USER TESTING so we fix the important problems not JUST the urgent ones.\n
  • - want to knock down the remaining top watched bugs\n- fixes for ‘platform’ stuff as luke mentioned -- untangling fundamental complexity by paying down tech debt on settings and code loading, building APIs\n- slimmer core - nagios types need to go--things that can be modularised should be. packaged puppet will contain a set of core modules but they won’t be in the same git repo\n- themes : error messages, type and provider split-up\n- but driven by USER TESTING so we fix the important problems not JUST the urgent ones.\n
  • - want to knock down the remaining top watched bugs\n- fixes for ‘platform’ stuff as luke mentioned -- untangling fundamental complexity by paying down tech debt on settings and code loading, building APIs\n- slimmer core - nagios types need to go--things that can be modularised should be. packaged puppet will contain a set of core modules but they won’t be in the same git repo\n- themes : error messages, type and provider split-up\n- but driven by USER TESTING so we fix the important problems not JUST the urgent ones.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

What's new in Puppet 3.0 Presentation Transcript

  • 1. What’s new in Puppet 3.0 Eric Sorenson | Puppet Labs eric0@puppetlabs.com presented by
  • 2. What’s In this Talk? • Hi. • The Road to Telly • New Stuff • Changed Stuff • Future # puppetconf # puppetize @ puppetlabs
  • 3. Puppet Releases over Time 3 2.6 2.7 0.22 0.24 0.250.132006 2007 2008 2009 2010 2011 2012
  • 4. timeline of Telly RCs by # of commits
  • 5. 14626 8874 4905 1341 195 204 142 -14 -73 -130 -137 -4824 -10770 -110663.0.0-rc1 3.0.0-rc2 3.0.0-rc3 3.0.0-rc4 3.0.0-rc5 3.0.0-rc6 3.0.0-rc7
  • 6. # pluginsync improvements
  • 7. # pluginsync improvements## enabled by default
  • 8. # pluginsync improvements## enabled by defaultpuppet agent --genconfig | grep pluginsync
  • 9. # pluginsync improvements## enabled by defaultpuppet agent --genconfig | grep pluginsync # pluginsync = true
  • 10. # pluginsync improvements## enabled by defaultpuppet agent --genconfig | grep pluginsync # pluginsync = true## lazy load... hard to demo
  • 11. # pluginsync improvements## enabled by defaultpuppet agent --genconfig | grep pluginsync # pluginsync = true## lazy load... hard to demo## install a Face from gems
  • 12. # pluginsync improvements## enabled by defaultpuppet agent --genconfig | grep pluginsync # pluginsync = true## lazy load... hard to demo## install a Face from gemspackage { ‘puppetlabs-cloud-provisioner’:
  • 13. # pluginsync improvements## enabled by defaultpuppet agent --genconfig | grep pluginsync # pluginsync = true## lazy load... hard to demo## install a Face from gemspackage { ‘puppetlabs-cloud-provisioner’: provider => gem,
  • 14. # pluginsync improvements## enabled by defaultpuppet agent --genconfig | grep pluginsync # pluginsync = true## lazy load... hard to demo## install a Face from gemspackage { ‘puppetlabs-cloud-provisioner’: provider => gem, ensure => present
  • 15. # pluginsync improvements## enabled by defaultpuppet agent --genconfig | grep pluginsync # pluginsync = true## lazy load... hard to demo## install a Face from gemspackage { ‘puppetlabs-cloud-provisioner’: provider => gem, ensure => present}
  • 16. # platform support
  • 17. # platform support## Ruby support cleanups[eric@glitch ~]% rbenv version1.9.3-p194
  • 18. # platform support## Ruby support cleanups[eric@glitch ~]% rbenv version1.9.3-p194## solaris 10 & 11puppet resource service # SMF yaypuppet resource zone # Zones yayfacter osfamily
  • 19. # platform support## Ruby support cleanups[eric@glitch ~]% rbenv version1.9.3-p194## solaris 10 & 11puppet resource service # SMF yaypuppet resource zone # Zones yayfacter osfamily## windows msi packagespackage { ‘XXX’: provider => windows }
  • 20. # hiera built in
  • 21. # hiera built in## beforeclass ntp($ntpserver=hiera(ntp_server, ‘time.apple.com’)) { ...}
  • 22. # hiera built in## beforeclass ntp($ntpserver=hiera(ntp_server, ‘time.apple.com’)) { ...}## afterclass ntp($ntpserver) { ...}
  • 23. # language features
  • 24. # language features## unlessunless $operatingsystem == ‘OpenBSD’ {
  • 25. # language features## unlessunless $operatingsystem == ‘OpenBSD’ { notice(“Need more neckbeard!”)}
  • 26. # Language features## unlessunless $operatingsystem == ‘OpenBSD’ { notice(“Need more neckbeard!”)}
  • 27. # quick WAT break
  • 28. # quick WAT breakdefine mytype($param = “Hello”) { notice(“$param”)}mytype { “demo”: param => undef }
  • 29. # quick WAT breakdefine mytype($param = “Hello”) { notice(“$param”)}mytype { “demo”: param => undef }## output
  • 30. # quick WAT breakdefine mytype($param = “Hello”) { notice(“$param”)}mytype { “demo”: param => undef }## outputScope(Mytype[demo]): Hello
  • 31. # more WAT
  • 32. # more WATclass foo { $variable="CORRECT"}class bar::foo {
  • 33. # more WATclass foo { $variable="CORRECT"}class bar::foo { class { "::foo":
  • 34. # more WATclass foo { $variable="CORRECT"}class bar::foo { class { "::foo": }
  • 35. # more WATclass foo { $variable="CORRECT"}class bar::foo { class { "::foo": } notify { $::foo::variable: }
  • 36. # more WATclass foo { $variable="CORRECT"}class bar::foo { class { "::foo": } notify { $::foo::variable: }}
  • 37. # more WATclass foo { $variable="CORRECT"}class bar::foo { class { "::foo": } notify { $::foo::variable: }}include bar::foo
  • 38. presented by
  • 39. presented by
  • 40. [eric@glitch.local ~/Sandbox/puppet]% git diff --stat2.7.x 3.0.0-rc7 | tail -1 1538 files changed, 37237 insertions(+), 68982deletions(-) presented by
  • 41. 1.8.5
  • 42. 1.8.5
  • 43. # dynamic scoping is gone
  • 44. # dynamic scoping is goneclass parent {
  • 45. # dynamic scoping is goneclass parent { $var = "from parent"
  • 46. # dynamic scoping is goneclass parent { $var = "from parent" include included
  • 47. # dynamic scoping is goneclass parent { $var = "from parent" include included}
  • 48. # dynamic scoping is goneclass parent { $var = "from parent" include included}class included {
  • 49. # dynamic scoping is goneclass parent { $var = "from parent" include included}class included { notify { $var: } ## NOT GONNA WORK
  • 50. # dynamic scoping is goneclass parent { $var = "from parent" include included}class included { notify { $var: } ## NOT GONNA WORK notify { $parent::var: } ## YUP
  • 51. # dynamic scoping is goneclass parent { $var = "from parent" include included}class included { notify { $var: } ## NOT GONNA WORK notify { $parent::var: } ## YUP}
  • 52. 53 3910 - Server is not authoritative over client environment when specified in an ENC -- Fixed in Telly 35 2198 - Install multiple package within a single call to the package manager -- Was patched against 0.24 and never merged 31 4409 - puppetmasterd does not find custom types for environment -- fixed in #13858 30 3741 - Custom facts loaded multiple times -- Fixed in telly 27 5517 - behavior change within 2.6 makes it impossible to override class parameters of "included" parametrized classes -- Early evaluation w/include foo meant we need early evaluation with class { foo: } 27 2977 - Postgres backend for dashboard 27 10418 - Puppet agent hangs when listen is true and reading from /proc filesystem on redhat -- Tracked down to specific files in /proc likemounts -- fixed in Facter 1.6.12. 26 8040 - Anchor pattern -- Graph should include containment relationships and not whits 26 5783 - Support HTTP(S) URL as the file source -- No action 26 2247 - enablerepo and disablerepo for yum type -- dup of 4113 (provider-specific options) 24 1886 - Add node cleanup capability -- Complete 24 12173 - Masters cannot reliably distinguish between multiple versions of a type/function/plugin used in different environments -- Needsprocess-per-environment. 23 5158 - File resources: Make source/content parameters and the file/template functions consistent. -- No action
  • 53. presented by
  • 54. The Road Ahead
  • 55. The Road Ahead• Continued focus on quality
  • 56. The Road Ahead• Continued focus on quality• Settings and Code Loading
  • 57. The Road Ahead• Continued focus on quality• Settings and Code Loading• Slimmer Core, More Modules
  • 58. The Road Ahead• Continued focus on quality• Settings and Code Loading• Slimmer Core, More Modules• Themed Feature Releases in 3.x
  • 59. The Road Ahead• Continued focus on quality• Settings and Code Loading• Slimmer Core, More Modules• Themed Feature Releases in 3.x• Driven by User Testing
  • 60. presented by
  • 61. presented by
  • 62. • Download it. presented by
  • 63. • Download it.• Run it. presented by
  • 64. • Download it.• Run it.• File bugs. presented by
  • 65. • Download it.• Run it.• File bugs.• Tell us what you think. presented by
  • 66. Thank YouEric Sorenson | twitter: @ahpook | irc: eric0eric0@puppetlabs.com presented by
  • 67. e follow us on Twitter @puppetlabsm youtube.com/puppetlabsincp slideshare.net/puppetlabs presented by