We’ve been using Puppet here at Rails Machine to manage our internal infrastructure for quite a while now, and it’s been great solution. Unfortunately, Puppet’s external DSL can be unfamiliar to Rubyists used to other Ruby-based DSLs like Rails, Rake, and Capistrano. But fortunately, Puppet actually has had a proof-of-concept Ruby DSL since July of 2006.
Last week we announced Moonshine, an opensource configuration management and deployment system being released in February (you can download the slides from the presentation Jesse Newland gave at ATLRUG here). Rather than re-implement those parts of Puppet, we decided to improve on the DSL included in Puppet, and build upon it.
While we’re hard at work finishing up the Moonshine release, we wanted to extract the work we’ve done on the Puppet Ruby DSL and release it so that people can experiment with it right now. We’re sharing ShadowPuppet with the Puppet development community early-on with the hope of improving and extending the existing, best of breed tools that are already available today.
ShadowPuppet is a re-implementation of Puppet::DSL designed for use by Rubyists. There’s actually not very much DSL in ShadowPuppet at all: manifests are Classes, groups of resources are instance methods, and ‘plugins’ are implemented as Modules.
You can install the ShadowPuppet gem with the
gem install shadow_puppet
There are a few difference worth mentioning between ShadowPuppet and Puppet itself:
- ShadowPuppet doesn’t use a puppetmaster (Puppet’s central server), but you can use Capistrano for remote execution.
- You configure ShadowPuppet with a manifest (like this one)
- You execute ShadowPuppet with the included
In addition to the Ruby DSL for Puppet, we’ve also been working to make it easier for Ruby developers to integrate the gathering of system and application facts. So today we’re also introducing ShadowFacter, a DSL wrapper around the pre-existing project, Facter, used by Puppet.
Let us know what you think, we’d love your feedback on these projects.
Update: You can learn a bit more about ShadowFacter from our post in the Puppet group.