A Puppet Story: Systems Building Systems (automation at scale)
by Andrew Clay Shafer
After years of automating systems with CFEngine, Luke Kanies, Puppet's primary author, had ideas
about automation that he could not express with existing tools. He tried to fork CFEngine, but
threw up his hands at the C code. As a sysadmin, his obvious next step was to try it with Perl.
More frustration... Python was getting a lot of attention, but after investing tens of hours, Luke
still couldn't express the basic system. Enter Ruby, Luke went from never seeing the language to a
functional prototype in 4 hours! And Puppet was born... (thank you Matz!!!)
Now Puppet is available in most Linux distributions and supported on Solaris and OS X, with
installations provisioning and managing 1000s of hosts in places like Google, Twitter and EC2. The
Puppet project provides 3 things 1) a declarative DSL for expressing the configuration of a system
2) a client/server/certificate authority system that handles authentication, authorization and
transport using SSL for communicating the configuration from the centralized repository to managed
hosts and 3) a resource abstraction layer to provide portability across platforms, where resources
are files, users, groups, packages, services, cron, etc... All Ruby!
This talk will begin with a bit of background on system automation, followed by Puppet's basic
philosophical underpinnings, and how those are manifested in Ruby. This will highlight what Puppet
is currently used to do in production environments at scale, while comparing and contrasting Puppet
with tools like Capistrano. The talk will finish with the present state of the project, discuss
some of the code and process challenges illuminated along the way and conclude with what is on
Puppet's horizon.
About Andrew Clay Shafer
Andrew Shafer works full time on the Ruby open source system management framework, Puppet. He brings
with him a background in computational science, embedded Linux development, web frameworks and Agile
methods. Andrew spent the last few years working for venture funded experiments in the Salt Lake
Valley using primarily C/C++, Java and more pl/sql than he'd care to admit... *shudder*
A recent convert to Ruby, Andrew appreciates Ruby, both for being a joy to program and for awakening
an interest in higher order/functional languages. He joined Reductive Labs, the people behind
Puppet, full time in April 2008. (http://reductivelabs.com)
His two sons think he is pretty cool.