Baptize
Baptize is an extension for Capistrano, that allows for server provisioning. The API resembles Sprinkle, but the underlying implementation is quite different. Where Sprinkle tries to compile a static payload of commands and push to the server, Baptize is executed in runtime. It also reuses much more of Capistrano, than Sprinkle does. Basically, each Baptize package is a capistrano task - Baptize just adds some helpers and fancy dsl on top, to make it look declarative.
Be warned that Baptize is less than a week old at the time of this writing, and it has no test coverage - so it’s probably riddled with bugs. That said, I do eat my own dog food, so it’s at least somewhat functional.
Setup
At some point, I’ll probably wrap this procedure in a generator, but for now you’ll have to do so manually.
To get started, create a Gemfile
:
“by source ‘https://rubygems.org’ gem ‘capistrano’, ‘~> 2.15’ gem ‘baptize’
“
And a Capfile
:
“by require ‘bundler’ require ‘capistrano’ require ‘baptize’ load_configuration :roles Dir.glob(“#capistrano_path/packages//.rb“).each do |package| load(package) end Dir.glob(”#capistrano_path/recipes//.rb“).each do |recipe| load(recipe) end
“
And a couple of folders and files:
./capistrano/
./capistrano/config/
./capistrano/config/roles.rb # Globally applied configuration. Define roles here.
./capistrano/config/baptize.rb # Contains config files used by baptize packages. Define policies here.
./capistrano/packages/ # Put package definitions in here.
./capistrano/recipes/ # Put regular capistrano tasks in here.
./capistrano/assets/ # Place auxiliary files here.
And Finally, run the following command:
bundle
Sample configuration
First define some roles, by opening up config/roles.rb
- This is just regular Capistrano stuff. For example:
“by role :server, “192.168.1.1”
“
Next define a policy for the server. Open up config/baptize.rb
and put this:
“by policy :server do requires :system_update end
“
This defines that the role :server
needs a package system_update
.
You probably should define which login credentials to use as well:
“by
ssh login user
set :user, ‘ubuntu’
ssh key location
ssh_options[:keys] = ‘~/.ssh/aws-key.pem’
run commands through sudo
set :use_sudo, true
“
Note that since this is defined inside config/baptize.rb
, it won’t apply to capistrano recipes outside of baptize. The roles, on the other hand, is globally loaded (That happens in the Capfile
).
Better create that packages then. Open up packages/system_update.rb
:
“by package :system_update do description “System Update” install do run ‘apt-get update -y’ run ‘apt-get upgrade -y’ end end
“
This defines a package, that will upgrade the apt package manager of the target system.
Deploying policies
You can now run the following command:
cap baptize
Which should make capistrano ssh in to the :server
role and try to update apt. It’ll probably fail, unless you actually have a server running at that IP.
If you want to just configure a single role, you can do so by running:
cap baptize:policies:server
Using Baptize alongside Capistrano
If you also want to use Capistrano for regular application deployment (what it’s actually ment for), you might want to create a file in config/deploy.rb
to hold settings for this. E.g.:
“by set :application, “set your application name here” set :repository, “set your repository location here”
“
And to make sure it is loaded, modify your Capfile
to include:
“by load ‘deploy’ load ‘deploy/assets’ # For using Rails’ asset pipeline before ‘deploy’ do load_configuration :deploy end
“
TODO: There is more to Baptize, but that’ll have to wait for now.