Deployment-oriented development with Puppet
There is the code that you've written, and then there are the systems
upon which that code executes. Developers take it for granted that
they can modify their code, refactor it, split it up into components,
and evolve it over time to better meet their needs. So why can't we
apply the same sort of principles to our infrastructure?
This talk aims to answer the following question:
"How would the way you do development change if you could model your
infrastructure as code?"
Puppet is a tool that helps automate the configuration of systems. It
gives developers and operations folk a language that lets them model
their systems using code. Once those models exist, you can treat that
code like any other code: it can be reviewed, branched, merged, and so
So once you've got a language for describing systems, what then? The
next step is to go beyond modeling the systems on which your
applications run, and now look at modeling your applications
themselves. How will your application be deployed? Can we make that
automatic? What dependencies does it require? Can we automatically
ensure those are present?
And lastly, once those two pieces are in place, I plan to discuss how
to merge the two ideas together. You can include the Puppet code that
deploys your application as part of the source tree for your app
itself. Puppet code _is_ product code. You can review new features,
ensuring that they include the automation necessary to actually deploy
them. You can deploy your code in the exact same way in Development,
Testing, or Production. You can make architectural changes to your
products by refactoring the Puppet code used to deploy those products.
Deployment problems can be traced back to the commit that caused them.
My talk is intended to educate the audience on Puppet (and other
similar tools), discuss how it works, talk about how one would model
an example system, expand that to include modeling more
application-level concerns, and lastly tie things together by
discussing strategies for managing Puppet code alongside the rest of