Skip to content

engineyard/engineyard-serverside-adapter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

0aa7c7f · Sep 30, 2013
Sep 30, 2013
Sep 30, 2013
Sep 14, 2010
Aug 3, 2013
Sep 30, 2013
Feb 15, 2013
Dec 5, 2012
Sep 16, 2010
Aug 3, 2013
Sep 30, 2013
Jul 25, 2013

Repository files navigation

EY::Serverside::Adapter

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.

Example

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
  end
end
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
  end

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

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.

Releasing

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.