capify-ec2 is used to generate capistrano namespaces using ec2 tags.
eg: If you have three servers on amazon's ec2.
server-1 Tag: Role => "web"
server-2 Tag: Role => "db"
server-3 Tag: Roles => "web, db"
Installing
gem install capify-ec2
In your deploy.rb:
require "capify-ec2/capistrano"
ec2_roles :web
Will generate
task :server-1 do
role :web, {server-1 public dns fetched from Amazon}
end
task :server-3 do
role :web, {server-3 public dns fetched from Amazon}
end
task :web do
role :web, {server-1 public dns fetched from Amazon}
role :web, {server-3 public dns fetched from Amazon}
end
Additionally
require "capify-ec2/capistrano"
ec2_roles :db
Will generate
task :server-2 do
role :db, {server-2 public dns fetched from Amazon}
end
task :server-3 do
role :db, {server-3 public dns fetched from Amazon}
end
task :db do
role :db, {server-2 public dns fetched from Amazon}
role :db, {server-3 public dns fetched from Amazon}
end
Running
cap web date
will run the date command on all server's tagged with the web role
Running
cap ec2:status
will list the currently running servers and their associated details (public dns, instance id, roles etc)
Running
cap ec2:ssh
will show a list of all running instances and let you enter the server # to ssh into, using the user and port specified in your configuration.
Running
cap ec2:ssh -s ec2roles=web,db
will show a list of running instances filtered by roles, and let you enter the server # to ssh into, using the user and port specified in your configuration.
ec2_roles {:name=>"web", :options=>{:cron=>"server-1"}}
Will generate
task :server-1 do
role :web, {server-1 public dns fetched from Amazon}, :cron=>true
end
task :server-3 do
role :web, {server-3 public dns fetched from Amazon}
end
task :web do
role :web, {server-1 public dns fetched from Amazon}, :cron=>true
role :web, {server-3 public dns fetched from Amazon}
end
Which is cool if you want a task like this in deploy.rb
task :update_cron => :web, :only=>{:cron} do
Do something to a server with cron on it
end
ec2_roles :name=>:web, :options=>{ :default => true }
Will make :web the default role so you can just type 'cap deploy'. Multiple roles can be defaults so:
ec2_roles :name=>:web, :options=>{ :default => true }
ec2_roles :name=>:app, :options=>{ :default => true }
would be the equivalent of 'cap app web deploy'
This gem requires 'config/ec2.yml' in your project. The yml file needs to look something like this:
:aws_access_key_id: "YOUR ACCESS KEY"
:aws_secret_access_key: "YOUR SECRET"
:aws_params:
:region: 'eu-west-1'
:project_tag: "YOUR APP NAME"
The :aws_params are optional. The :project_tag parameter is optional. It will limit any commands to running against those instances with a "Project" tag set to the value "YOUR APP NAME".
Source hosted at GitHub. Report Issues/Feature requests on GitHub Issues.
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don't break it in a future version unintentionally.
- Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
- Send me a pull request. Bonus points for topic branches.
Copyright (c) 2011 Forward. See LICENSE for details.