Open Sourcing Boxen @Intridea


In the year since Intridea started using Boxen (GitHub’s Puppet-based automation solution for OS X), a lot has happened. Not only are folks all over the company embracing it, but we’ve also become extremely proficient with it. Boxen’s documentation, while improving, has us wanting to share our configurations as a way to help new users. However, due to containing client information, we have been unable to share our Boxen repository.

Until now.

Today, we are open sourcing our Boxen repository.

To do this, we are maintaining two repositories: One public and one private. The only difference is in the project-related details. The contents of each user’s project manifest is empty in the public version, like so:

class projects::people::gary { } 

While the private version contains whatever projects they would normally include as part of daily use:

class projects::people::gary {    include projects::intridea::omniauth   include projects::client::secret  } 

The user’s project manifest is then included in a standardized way:

class people::gary {    include projects::people::gary  } 

Using this layer of indirection for projects, along with the personal project inclusion pattern shown above, makes for dead simple maintenance between the repositories. Said pattern creates a line between public and private information, keeping sensitive details stored exclusively in each user’s project file, and then using a blank placeholder on the public version of the repository. Using placeholder project manifests combined with the indirection we add for personal project inclusion ensures that no client information will be leaked to the Web.

Why go to all the trouble of open sourcing configs?

Every piece of knowledge can help someone else, no matter how trivial it may seem. When we first got setup with Boxen, writing a personal manifest seemed like a daunting task. Boxen’s documentation, although better now, is still lacking. In many cases, reading others’ configurations can be a bigger help than sifting through Boxen’s code and Puppet’s (good, but exhaustive) documentation.

Just as we found Plyfe’s boxen repo to be so helpful that we used it as a baseline for our own configs, our goal in open sourcing our Boxen configuration is to pay it forward for the next organization that takes up Boxen.

Got any tips or tricks for using Boxen? Send us a tweet or message us on Facebook!