This library provides an interface bound to the same version of engineyard-serverside.

It tries very hard to throw an exception whenever the caller does anything wrong. The benefit of this is that you can depend on a newer version of engineyard-serverside-adapter and run your tests; if they pass, you can be fairly confident that your code will work with the newer version of engineyard-serverside.

engineyard-serverside-adapter provides you with a builder to describe a cluster, and yields commands to the block you pass. Because it knows nothing about how to connect to a server, only what commands to run, it can be used anywhere where interaction with engineyard-serverside is needed.


This example is adapted from the engineyard gem:

require 'engineyard-serverside-adapter'

def adapter(app, verbose)
  EY::Serverside::Adapter.new("/usr/local/ey_resin/ruby/bin") do |args|
    args.app           = app.name
    args.git           = app.repository_uri
    args.instances     = environment.instances.map { |i| {:hostname => i.public_hostname, :roles => [i.role], :name => i.name} }
    args.verbose       = verbose || ENV['DEBUG']
    args.stack         = environment.stack_name
    args.framework_env = environment.framework_env
private :adapter

def deploy(app, ref, migration_command=nil, extra_configuration=nil, verbose=false)
  deploy_command = adapter(app, verbose).deploy do |args|
    args.config  = extra_configuration if extra_configuration # anything that can be to_json'd
    args.migrate = migration_command if migration_command
    args.ref     = ref

  deploy_command.call { |command| app_master.ssh(command) }

You can set up args in Adapter.new, in Adapter#deploy (#rollback, #restart, etc.), or in both. A good idea is to set up common args (e.g. app, instances) in Adapter.new and then supply deploy-specific args to Adapter#deploy. We hope this lets your code stay DRY while also avoiding unnecessary work from generating unnecessary args.


Bump the version in lib/engineyard-serverside-adapter/version.rb, commit it, and then run

$ rake release

This will tag and push for you.

The engineyard gem depends on this gem to talk to the server side deploy mechanism. Update the version of engineyard-serverside-adapter in engineyard's Gemfile to interact with a new version of engineyard-serverside.