Ubistrano on Rails Envy
I am thankful to have received a brief plug last Friday from Jason Seifer on Rails Envy Podcast #70. Hosting along side Obie Fernandez, he briefly mentioned my server provisioning tool, Ubistrano, and got me a few more watchers on GitHub.
Ubistrano came about primarily because I did not want to learn Puppet’s (ugly) proprietary scripting language. Sprinkle has great promise, but at the time was short on examples and had no stable versioning in place. It made the most sense to throw together some helper methods and write the provisioning process myself. I think it is still the quickest way to get rolling without having to cobble together recipes from random places. However, you are restricted to my very specific server stack.
I am writing this to outline my view of Ubistrano 2.0, which will probably be released under a different name. Firstly, I want to eliminate Capistrano altogether. I want everything to be run from a binary on the target machine (i.e. ubistrano apache:install). Using this binary you can run automated tasks written in a nice Ruby DSL. The DSL handles things like:
- Building and installing binaries
- Piping STDIN/STDOUT to and from other processes
- Adding and removing strings from files
- Creating a cohesive install process (return where you left off)
…and anything else you need to provision a system. The solution I am describing becomes more of a generic automation tool, one that you could also use to install the latest version of Git, manage a project’s externals, upload SSH keys, and other local tasks. Ideally these tasks could be packaged as gems for quick installation to a target system.