Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Puppet 3: Present and Future Tense
1. Puppet 3: Present and
future tense
Eric Sorenson | Puppet Labs
eric0@puppetlabs.com
presented by
2. What’s In this Talk?
• Hi.
• The path to 3.1
• Shiny new stuff and Changes since 2.7
• Future
• The outside world
• Call to action
#puppetcamp @puppetlabs
3. Front Matter
• Welcome to PuppetCamp!
• Ground Rules for Conduct
• Be Nice. Assume good faith.
• Encourage diversity and participation
• Keep it legal
#puppetcamp @puppetlabs
thank you for coming. these events are really about you. we have an amazing group of
speakers lined up for the structured part of the program, then in the afternoon a split track
with intro tutorials for people new to puppet and open spaces where we’ll all collectively
figure out what’s the best way to spend our time.
i’m going to lay out some ground rules so we can all have a great, respectful, productive
event. first, we should be nice in our interactions with one another. as wikipedia says, assume
the other people are acting in good faith and aren’t automatically crazy or dumb because
they have a different view.
second, related point -- i’m going to read this part because its important and i get emotional
about it, so i dont want to miss anything. we have a problem in open source: we’ve built a
system of communication that’s unfair, because it tends to exclude the voices of people who
aren’t some or all of young, male, straight and white. apart from individual actions of
harassment, which are against both our principles and our policy, the system perpetuates
itself unless we do something to change it. So yes, be nice, and especially be aware of how
your biases affect your interactions with those around you.
Lastly, keep it legal -- for presentations and open spaces: respect privacy and confidentiality
and the laws of the land. Note we do not have any talks from quasi-legal organizations like
Pirate Bay or the US National Security Agency scheduled -- so either end of the criminal
spectrum.
4. Thank our Sponsors!
• Be nice to everyone @HoGentFBO
• Tweet Sponsors a #puppetcamp DANK U!!
• @inuits, @nucleus_hosting for Camp
• @bookingcom for FREE BEER tonight
#puppetcamp @puppetlabs
you can take out your phone now.
5. #puppetcamp @puppetlabs
Hi. I’m Eric Sorenson aka eric0 on irc, ahpook on twitter.
product owner for opensource puppet.
cfengine since 98, in awesome but failed startups
puppet user since 0.24 at apple, an awesome sucessful non-startup
puppet employee since june, an awesome hopefully successful startup
love OSS, commited to puppet becoming an amazing platform that our Puppet Enterprise
team and community build on
6. #puppetcamp @puppetlabs
THE PAST - puppet camp 2009 at uc san francisco.
anybody else there? turns out attendance at this conference is the single biggest predictor for
eventually working at puppet labs. something around 30% of attendees end up employees. so
see me after the talk!
7. A Brief History of Puppet
3 3.1
2.6 2.7
0.13 0.22 0.24 0.25
2006 2007 2008 2009 2010 2011 2012 2013
#puppetcamp @puppetlabs
this slide’s alternate title was ‘give edward tufte an aneurysm’
roughly yearly releases until the Great Renaming in 2010 introduced roughly 10x more
puppet
any pre-0.24 users here?
sep 2009 0.25.0 introduced REST instead of XML-RPC
july 2010 2.6.0 had run stages, param classes, complex data structures, and lots of syntax
june 2011 2.7.0 introduced greater API-zation , through faces and exposing more
functionality like certificates through REST
significant new functionality through 2.7 series, including some surprises in minor versions.
up to 2.7.20 now.
next up is 3, released this week.
8. 2.7.0 Release
3.0.0 Release
3.1.0 Release
#puppetcamp @puppetlabs
jeff weiss made this calendar heat map of commit lines-of-code changed between 2.7 and
3.x
0-250 / 250-500 / 500-750 / > 750 lines in each of 4 shades of green.
it was a long road to the 3.0 release and things got fairly intense around puppet conf in
september...
and didn’t really slake off so far in 2013. lots of great stuff in there, lets talk about it in more
detail.
9. #puppetcamp @puppetlabs
From http://www.keepcalm-o-matic.co.uk/p/keep-calm-and-ooh-shiny/
10. # code loading improvements
## pluginsync enabled w/ lazy loading
puppet agent --genconfig | grep pluginsync
# pluginsync = true
## faces can load from a module
puppet module install pl-cloud_provisioner
## accessing/using settings is sane(r)
require ‘puppet’
Puppet.initialize_settings
## YARD DOCS ROCK
yard server
open http://localhost:8808
#puppetcamp @puppetlabs
enabled by default to ease bootstrapping
lazy-loaded instead of download-then-load
`gem install` just works for Ruby extensions
more work to do on the code distribution story: puppet modules as 1st class distribution and
good OS citizens (reducy RUBYLIB craziness)
open yard, click Class List then Type. This shows a helpful description about what a type
looks like
11. # platform support
## solaris 10 & 11
puppet resource service # SMF yay
puppet resource zone # Zones yay
facter osfamily # thx ashp
## windows msi packages
package { ‘XXX’: provider => windows }
## loads of correctness and features
#puppetcamp @puppetlabs
ruby 1.9.3 - sorta worked on 2.7, for realz on 3. earlier 1.9, pls dont
solaris - 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”, holdable
packages
ashley penney --variants like openindiana into osfamily.
windows support improved with more to come --next up is powershell
correctness - redhat: pip provider works, better useradd
mac: pkgdmg works again, launchd servers can be restarted, mountain lion support
debian:
12. # hiera built in via data bindings (thx RI)
## before
class ntp($ntpserver=hiera(ntp_server,
‘time.apple.com’)) {
...
}
## after
class ntp($ntpserver) {
...
}
#puppetcamp @puppetlabs
whos used hiera? heard of hiera? simple hierarchical data store for separating code from data
arri wrote it, available as add-ons since last june.
simplified install--4 packages to 2--auto dependencies
simplified usage w/ data bindings -- kelsey’s work
13. # language features
## unless
unless $operatingsystem == ‘OpenBSD’ {
notice(“Need moar neckbeard!”)
}
## More on the way in 3.2 (see #11331)
$array = [ ‘foo’, ‘bar’, ‘baz’ ]
foreach($array) { |$item|
file { “/tmp/${item}”: ensure => present }
}
#puppetcamp @puppetlabs
if !
14. #puppetcamp @puppetlabs
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.
bottom graph is from finch in puppet operations, showing runtime (compile + apply dropping
and smoothing out on 3)
- store catalog on agent in json not yaml
- avoid needless object creation
- reduce stat() call
15. 1.8.5
#puppetcamp @puppetlabs
we’re deprecating support for ruby 1.8.5 in telly.
RHEL5 platform can use a drop-in 1.8.7 package backported from el6
16. 1.9.3
#puppetcamp @puppetlabs
squashed the last known 1.9 compat bug in 3.1 (cant collect virtual resources)
please use it!
we’re running on ruby 2.0 now w/ just a couple of test problems
17. # dynamic scoping is gone
class parent {
$var = "from parent"
include included
}
class included {
notify { $var: } ## NOT GONNA WORK
notify { $parent::var: } ## YUP
}
#puppetcamp @puppetlabs
takeaway: qualify your variables. local scope works, top-level works --
18. # old Ruby DSL is deprecated
# rewritten Ruby DSL out of play
# if you use it in production and
really need a feature, let us know!
#puppetcamp @puppetlabs
19. #puppetcamp @puppetlabs
Image via http://brandontoddwright.blogspot.be/2011/07/problem-with-jetpacks.html
20. The future
• Beware “Forward-Looking Statements”
• But we’re striving for transparency
• Keep up on the backlog query
• Modularity, Asynchronicity, Integration
#puppetcamp @puppetlabs
21. Modules Everywhere
• Enable Easy Iteration
• Modular Filesystem layout in lib/
• Updated versions in modulepath?
• Also: “params” data and more helpful
metadata in Puppet modules
#puppetcamp @puppetlabs
make it easy to iterate on parts of puppet that move at a different speed than core
types and providers especially -- separate repos that are versioned and combined at
packaging time
22. Asynchronous Life
• Enable HUUUUUUGE scale
• Enable rapid runs - 1/minute?
• It’s a ways off but we know we need:
• Lightweight daemon (kick replacement)
• Facter storage service
• Standalone compiler
#puppetcamp @puppetlabs
23. Integrating Ourselves
• We want to be your PaaL
• YARD everywhere
• If you need stuff in Private methods, ask!
• Radical Ideas as a Service
#puppetcamp @puppetlabs
“puppet as a library”
24. • The outside world
#puppetcamp @puppetlabs
the world outside of puppet core is big and full of cool things.
photo credit: eric sorenson
25. The World Around Us
• PuppetDB 1.1 - Reports, sweet query API
• MCollective 2.3 development series
• Puppet Enterprise
• Rebase onto Puppet 3 + PuppetDB
• Features around Reports in PuppetDB
#puppetcamp @puppetlabs
26. #puppetcamp @puppetlabs
that’s sven nys, eight time belgian cyclocross champion giving you a call to action
photo: cyclephotos.co.uk
27. What you can do
• Download it.
• Run it.
• File bugs.
• Tell us what you think.
#puppetcamp @puppetlabs