Git Product home page Git Product logo

capify-ec2's People

Contributors

andrew avatar andytinycat avatar aterreno avatar bhardin avatar fixlr avatar jeffdevine avatar kcrayon avatar kei-s avatar lloydpick avatar m14t avatar marcinc avatar mpatric avatar ncantor avatar rylon avatar scarybot avatar sdawara avatar shishirsharma avatar stuartquin avatar thattommyhall avatar trgoodwin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

capify-ec2's Issues

Issue when having multiple roles and variables in each

If I define two roles:

ec2_roles   :name => :apiserver,
            :options => {:default=>true} ,
            :variables => {
                :domain => "apiserver.dev.instamotor.com",
                :thin_server_tag => "apiserver",
                :rackup_path => "apiserver/config.ru"
            }
ec2_roles   :name => :telegraph,
            :options => {:default=>true} ,
            :variables => {
                :domain => "telegraph.dev.instamotor.com",
                :thin_server_tag => "telegraph",
                :rackup_path => "telegraph/config.ru"
            }

And then have two tasks defined:

task :restart_apiserver, :roles => [:apiserver], :on_no_matching_servers => :continue do 
    thin_config_path = "#{current_path}/config/server/thin.#{domain}.yml"
    thin_rackup_path = "#{current_path}/#{rackup_path}"
    restart_thin  = "cd #{current_path} && bundle exec thin -C #{thin_config_path} -R #{thin_rackup_path} restart >> #{current_path}/log/#{thin_server_tag}.thin.log 2>&1"
    restart_nginx = "sudo service nginx restart" 

    run "#{restart_thin}"
    run "#{restart_nginx}"
end
task :restart_telegraph, :roles => [:telegraph] , :on_no_matching_servers => :continue do 
    thin_config_path = "#{current_path}/config/server/thin.#{domain}.yml"
    thin_rackup_path = "#{current_path}/#{rackup_path}"
    restart_thin  = "cd #{current_path} && bundle exec thin -C #{thin_config_path} -R #{thin_rackup_path} restart >> #{current_path}/log/#{thin_server_tag}.thin.log 2>&1"
    restart_nginx = "sudo service nginx restart" 

    run "#{restart_thin}"
    run "#{restart_nginx}"
end

When I call

cap integration telegraph apiserver deploy:restart

Only the apiserver variables get set in both the telegraph task and the apiserver task so both tasks end up calling the command

"cd /home/ubuntu/current && bundle exec thin -C /home/ubuntu/current/config/server/thin.apiserver.dev.instamotor.com.yml -R /home/ubuntu/current/apiserver/config.ru restart >> /home/ubuntu/current/log/apiserver.thin.log 2>&1"

Task doesn't find servers by role (multistage)

I have this task:

namespace :ec2 do
  task :test_boot, roles: :boot do
    run "echo HELLO!"
  end
end

When I try to run it, I get the error

    triggering load callbacks
  * 2013-10-09 14:57:57 executing `staging'
    triggering start callbacks for `ec2:test_boot'
  * 2013-10-09 14:57:58 executing `multistage:ensure'
  * 2013-10-09 14:57:58 executing `ec2:test_boot'
`ec2:test_boot' is only run for servers matching {:roles=>:boot}, but no servers matched

Here's the output of cap ec2:status

    triggering load callbacks
  * 2013-10-09 15:00:07 executing `staging'
    triggering start callbacks for `ec2:status'
  * 2013-10-09 15:00:08 executing `multistage:ensure'
  * 2013-10-09 15:00:08 executing `ec2:status'
 Stages: staging.
Num   Name           ID    Type        DNS                               Zone         Stages    Roles
00:   Staging        i-*   m1.medium   ec2-***.compute-1.amazonaws.com   us-east-1b   staging   app
01:   staging_boot   i-*   m1.medium   ec2-***.compute-1.amazonaws.com   us-east-1b   staging   boot

And here's my staging.rb:

ec2_roles name: :boot

I know this is getting picked up because I can execute a "cap boot ec2:status", and if I remove the "ec2_roles :boot" line I get a missing task error on that. Am I missing something here? Thanks!

Failure on execution of custom tasks with "Options" dependencies

When I place a options related task (same as in the documentation) in my deploy.rb:

task :reload_workers => :web, :only=>{:worker=>true} do
  # Do something to a specific server with the 'worker' option in it's EC2 tags.
end

After adding these lines I receive the following error (the role "web" exist and the option "worker" also):

.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/namespaces.rb:91:in `task': undefined method `to_sym' for {:reload_workers=>:web, :only=>{:worker=>true}}:Hash (NoMethodError)
    from ./config/deploy.rb:35:in `load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:93:in `instance_eval'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:93:in `load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:172:in `load_from_file'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:89:in `load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:86:in `block in load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:86:in `each'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:86:in `load'
    from Capfile:4:in `load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:93:in `instance_eval'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:93:in `load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:172:in `load_from_file'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:89:in `load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:86:in `block in load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:86:in `each'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/configuration/loading.rb:86:in `load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/cli/execute.rb:65:in `block in load_recipes'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/cli/execute.rb:65:in `each'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/cli/execute.rb:65:in `load_recipes'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/cli/execute.rb:31:in `execute!'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/lib/capistrano/cli/execute.rb:14:in `execute'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/gems/capistrano-2.15.3/bin/cap:4:in `<top (required)>'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/bin/cap:19:in `load'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/bin/cap:19:in `<main>'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/bin/ruby_noexec_wrapper:14:in `eval'
    from /Users/ssalat/.rvm/gems/ruby-1.9.3-p392/bin/ruby_noexec_wrapper:14:in `<main>'

Any ideas?

nodename nor servname provided

thanks for the project. haven't been able to get it to work though. i created the ec2.yml file, and added the following to deploy.rb

require "capify-ec2/capistrano"
ec2_role :web

all i get is the following error:

/Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/excon-0.13.4/lib/excon/socket.rb:26:in getaddrinfo': getaddrinfo: nodename nor servname provided, or not known (Excon::Errors::SocketError) from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/excon-0.13.4/lib/excon/socket.rb:26:inconnect'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/excon-0.13.4/lib/excon/socket.rb:16:in initialize' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/excon-0.13.4/lib/excon/ssl_socket.rb:31:ininitialize'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/excon-0.13.4/lib/excon/connection.rb:326:in new' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/excon-0.13.4/lib/excon/connection.rb:326:insocket'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/excon-0.13.4/lib/excon/connection.rb:171:in request_kernel' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/excon-0.13.4/lib/excon/connection.rb:97:inrequest'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/fog-1.3.1/lib/fog/core/connection.rb:20:in request' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/fog-1.3.1/lib/fog/aws/compute.rb:320:inrequest'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/fog-1.3.1/lib/fog/aws/requests/compute/describe_instances.rb:75:in describe_instances' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/fog-1.3.1/lib/fog/aws/models/compute/servers.rb:64:inall'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/fog-1.3.1/lib/fog/core/collection.rb:131:in lazy_load' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/fog-1.3.1/lib/fog/core/collection.rb:18:ineach'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capify-ec2-1.2.8/lib/capify-ec2.rb:28:in block in initialize' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capify-ec2-1.2.8/lib/capify-ec2.rb:25:ineach'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capify-ec2-1.2.8/lib/capify-ec2.rb:25:in initialize' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capify-ec2-1.2.8/lib/capify-ec2/capistrano.rb:6:innew'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capify-ec2-1.2.8/lib/capify-ec2/capistrano.rb:6:in capify_ec2' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capify-ec2-1.2.8/lib/capify-ec2/capistrano.rb:74:inec2_role'
from ./config/deploy.rb:42:in load' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:93:ininstance_eval'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:93:in load' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:172:inload_from_file'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:89:in load' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:86:inblock in load'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:86:in each' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:86:inload'
from Capfile:8:in load' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:93:ininstance_eval'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:93:in load' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:172:inload_from_file'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:89:in load' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:86:inblock in load'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:86:in each' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/configuration/loading.rb:86:inload'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/cli/execute.rb:65:in block in load_recipes' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/cli/execute.rb:65:ineach'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/cli/execute.rb:65:in load_recipes' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/cli/execute.rb:31:inexecute!'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/lib/capistrano/cli/execute.rb:14:in execute' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/gems/capistrano-2.12.0/bin/cap:4:in<top (required)>'
from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/bin/cap:19:in load' from /Users/haider/.rvm/gems/ruby-1.9.3-p125@rails32/bin/cap:19:in

'

Feature request: Enable Roles and Options separator config (instead of comma)

I'm using CLI from Amazon Auto Scaling Command Line Tool and it seems I can't create tag values with comma as separator. I have something like this with the CLI

$AWS_AUTO_SCALING_HOME/bin/as-create-auto-scaling-group WebAppScalingGroup --launch-configuration WebAppLaunchConfig --availability-zones us-east-1a --min-size 1 --max-size 20 --load-balancers LoadBalancer --tag "k=Name, v=MyProject-WebApp, p=true" --tag "k=Project, v=MyProject, p=true" --tag "k=Roles, v=web,app, p=true"

and the error is:

as-create-auto-scaling-group:  Malformed input-No value separator = found in app

The error seems to be here:
https://forums.aws.amazon.com/message.jspa?messageID=331304

If we can set it to different separator like | or other characters then it would be the best to overcome the issue of AWS CLI tools. What do you think?

Assumes only one ELB per instance

Hiya,

We have an environment where individual instances are running multiple servers behind multiple load balancers (mostly for cost saving).

I think Capify-ec2 assumes that each instance only belongs to one load balancer.

For instance:
We have two environments, dev and staging. They both run on the same instance. This instance has two load balancers, one for dev and one for staging, pointing to different ports with different health checks.

During a deployment of staging the degreister_instance_from_elb_by_dns de-registered the instance from the dev ELB.

I have a couple of ideas on solutions, but imagine it could get pretty complicated pretty quick.

  • The simplest would be to deregister from all ELBs, but that isn't quite right.
  • An alternative would be to accept another parameter alongside :load_balanced which provides a regex or name of the ELB that can be deregistered from.
  • A final idea would be to reuse the health check: i.e. get all ELBs that this instance is part of, and using the health checks from each role deregister it if there is a match between the ELB list and the health check list.

Let me know your thoughts - I'll see if I can prototype something when I get some time.

Cheers,
Ed

undefined method `to_sym' for nil:NilClass

I have a very simple configuration file for two EC2 instances running behind an ELB.

:aws_access_key_id: "(redacted)"
:aws_secret_access_key: "(redacted)"
:aws_params:
  :region: 'eu-west-1'
:project_tag: "foo"

Here's my deploy.rb:

require "capify-ec2/capistrano"

set :application, "(redacted)"
set :repository,  "(redacted)"

ec2_roles :web,
          :variables => {
            :load_balanced => true
          }

set :deploy_to, "/var/www"

Now, running cap ec2:status works fine as long as I don't have the :variables hash there, but as soon as I include it, I get:

/var/lib/gems/1.9.1/gems/capify-ec2-1.5.1/lib/capify-ec2/capistrano.rb:277:in `define_role_roles': undefined method `to_sym' for nil:NilClass (NoMethodError)
    from /var/lib/gems/1.9.1/gems/capify-ec2-1.5.1/lib/capify-ec2/capistrano.rb:249:in `ec2_role'
    from /var/lib/gems/1.9.1/gems/capify-ec2-1.5.1/lib/capify-ec2/capistrano.rb:231:in `block in ec2_roles'
    from /var/lib/gems/1.9.1/gems/capify-ec2-1.5.1/lib/capify-ec2/capistrano.rb:231:in `each'
    from /var/lib/gems/1.9.1/gems/capify-ec2-1.5.1/lib/capify-ec2/capistrano.rb:231:in `ec2_roles'
    from ./config/deploy.rb:10:in `load'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:93:in `instance_eval'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:93:in `load'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:180:in `load_from_file'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:89:in `load'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `block in load'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `each'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `load'
    from Capfile:4:in `load'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:93:in `instance_eval'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:93:in `load'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:180:in `load_from_file'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:89:in `load'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `block in load'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `each'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `load'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:65:in `block in load_recipes'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:65:in `each'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:65:in `load_recipes'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:31:in `execute!'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:14:in `execute'
    from /var/lib/gems/1.9.1/gems/capistrano-2.15.5/bin/cap:4:in `<top (required)>'
    from /usr/local/bin/cap:19:in `load'
    from /usr/local/bin/cap:19:in `<main>'

My instances have the web roles defined:

aws-tags

I'm on Ubuntu 12.04 with Rails 1.9.3p0.

Weired bug

I keep getting this message.

ec2:date' is only run for servers matching {}, but no servers matched

I have exactly followed your description.

"but no servers matched" for :db task

I've had this problem for awhile and have decided it's time to get to the bottom of it. Currently get the error:

`deploy:migrate' is only run for servers matching {:roles=>:db, :only=>{:primary=>true}}, but no servers matched

when I run cap production deploy:migrate

My deploy file has;

   ec2_roles :name => :db,           :options => { :default=>true }

and the db server shows up in cap production ec2:status and also when I do a puts roles.inspect from within a dummy task.

Any ideas?

License missing from gemspec

Some companies will only use gems with a certain license.
The canonical and easy way to check is via the gemspec
via e.g.

spec.license = 'MIT'
# or
spec.licenses = ['MIT', 'GPL-2']

Bundler now generates gems with a default 'MIT' license. There is even a License Finder
to help companies ensure all gems they use meet their licensing needs. This tool depends on license information being available in the gemspec.
Including a license in your gemspec is a good practice, in any case.

If you need help choosing a license, github has created a license picker tool

How did I find you?

I'm using a script to collect stats on gems, originally looking for download data, but decided to collect licenses too,
and make issues for gemspecs not specifying a license as a public service :)
So far it's going pretty well.
I've written a blog post about it

Cannot figure out syntax for registering and deregistering instances

Assuming the following setup:

ec2_roles ({ 
  :name => "web", 
  :variables => {
    :load_balanced => true
    },
   :options => {
    :default => true
   }
  })

… and this status:

Project: foo.
Num   Name        ID           Type        DNS                                                  Zone         Roles
00:   fooweb2   i-5bd3ef17   m1.medium   fooweb2.eu-west-1.compute.amazonaws.com     eu-west-1b   web
01:   fooweb1   i-dd824992   m1.medium   fooweb1.eu-west-1.compute.amazonaws.com   eu-west-1a   web

How would I go about deregistering either of those instances? I've tried cap ec2:deregister_instance, but it doesn't print anything other than the task name, or result in anything.

I've also tried – similar to the cap ec2:ssh syntax:

cap ec2:deregister_instance 0
  * 2013-11-11 10:06:43 executing `ec2:register_instance'
the task `0' does not exist

I've tried this.. but it tries to execute two tasks:

± % cap 'fooweb2' ec2:deregister_instance
  * 2013-11-11 10:09:42 executing `fooweb2'
  * 2013-11-11 10:09:42 executing `ec2:deregister_instance'

I use the latest stable Capistrano 2.15.5. (Not sure if I can just upgrade to 3.0. Don't want to risk anything breaking.)

Options doesn't seem to be working

Options tagged on the ec2 instance dno't seem to come through. I believe it may be down to the following in capistrano.rb:123

instance.tags["Options"].each do |option| 
  results = option.split(',')
  results.each {|result| new_options[result.to_sym] = true }
end rescue false

I don't believe instance.tags["Options"] is an array. I think this should be

instance.tags["Options"].split(',').each do |option|
  new_options[option.to_sym] = true
end

Not 100% sure as I'm running off the Gem which is behind the current code so is not using tags

-Mark

List of servers

Is it possible to get a list of servers in a particular Role in some sort of variable?
As an example, I need to rsync something to all servers with the Role: web in a custom task. Currently I have 4 rsync run commands, one for each server - but obviously this isn't dynamic.

cap servername deploy isnt working when servername has multiple roles

The deploy:assets:symlink task fails when doing a single server deploy to a server that has multiple roles (including the role that matches assets_role).

At first my server had "Roles" set to "app,db" and got the below error. When I edited the "Roles" aws tag to only have 'app', the deploy worked. I have assets_role defined as :app. So it seems something is not registering the server under the 'app' role when it is listed as having multiple roles.

I made sure the following was also in my deploy.rb:

ec2_roles :name=>:app, :options => {:default=>true}
ec2_roles :name=>:db, :options => {:default=>true}

When running "cap server1 deploy", I get the following error:

*** [deploy:update_code] rolling back

  • executing "rm -rf /home/ubuntu/apps/myapp/releases/20130918175119; true"
    servers: ["ecxxxxxxxx.compute-1.amazonaws.com"]
    [ecxxxxxxxx.compute-1.amazonaws.com] executing command
    command finished in 920ms
    `deploy:assets:symlink' is only run for servers matching {:roles=>#<Proc:0x007f9e648bdf08@/Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.5/lib/capistrano/recipes/deploy/assets.rb:42 (lambda)>, :except=>{:no_release=>true}}, but no servers matched

Creating AMI

Hi,

have you thought about the issue of autoscaling?

What would be the correct procedure?

  1. stop autoscaling
  2. deploy
  3. create new ami
  4. re-enable autoscaling

Unable to use server name as task

When I try and use the auto-generated task from the server name, I get an error:

thunder:leaddyno-app machado$ cap web1 ec2:date
  * 2013-06-22 21:56:30 executing `web1'
/Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capify-ec2-1.4.11/lib/capify-ec2/capistrano.rb:216:in `block in ec2_roles': undefined method `[]' for nil:NilClass (NoMethodError)
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/configuration/execution.rb:138:in `instance_eval'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/configuration/execution.rb:138:in `invoke_task_directly'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/configuration/callbacks.rb:25:in `invoke_task_directly_with_callbacks'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/configuration/execution.rb:89:in `execute_task'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/configuration/execution.rb:101:in `find_and_execute_task'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/cli/execute.rb:46:in `block in execute_requested_actions'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/cli/execute.rb:45:in `each'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/cli/execute.rb:45:in `execute_requested_actions'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/cli/help.rb:19:in `execute_requested_actions_with_help'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/cli/execute.rb:34:in `execute!'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/lib/capistrano/cli/execute.rb:14:in `execute'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/gems/capistrano-2.15.4/bin/cap:4:in `'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/bin/cap:19:in `load'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/bin/cap:19:in `'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/bin/ruby_noexec_wrapper:14:in `eval'
    from /Users/machado/.rvm/gems/ruby-1.9.3-p392@leaddyno-app/bin/ruby_noexec_wrapper:14:in `'
thunder:leaddyno-app machado$ cap ec2:date
  * 2013-06-22 21:56:35 executing `ec2:date'
  * executing "date"
    servers: ["ec2-5x-1x-3x-1x.compute-1.amazonaws.com"]
    [ec2-5x-1x-3x-1x.compute-1.amazonaws.com] executing command
 ** [out :: ec2-5x-1x-3x-1x.compute-1.amazonaws.com] Sun Jun 23 04:56:38 UTC 2013
    command finished in 1383ms
thunder:leaddyno-app machado$ cap ec2:status
  * 2013-06-22 21:56:45 executing `ec2:status'
Project: leaddyno-app.
Num   Name   ID           Type        DNS                                        Zone         Roles     Options
00:   web1   i-xxxxx   m1.medium   ec2-5x-1x-3x-1x.compute-1.amazonaws.com   us-east-1b   app,web
thunder:leaddyno-app machado$

It looks like @ec2_config is not a valid instance variable in lib/capify-ec2/capistrano.rb. I tried to replace

@ec2_config[:aws_roles_tag]

with

capify_ec2.ec2_config[:aws_roles_tag]

But that results in the raw comma-separated list of roles, not an array, that line 216 is expecting. I didn't dig too deep, I assume there is an array version of the server's roles in one of the data structures, but I didn't go digging.

I am running version 1.4.11.

Being able to execute cap tasks on just a single server is super handy, so I hope this gets fixed soon! Thanks for the excellent gem, it makes my rolling deploys a breeze!

Fog dependency

Is there a particular reason fog is locked at 1.3.1 in the gemspec? That version is over a year old and the hard version lock will undoubtedly cause dependency resolution problems for people.

Can the required fog version be bumped up to something more recent, like, say, ~> 1.10.0?

Get the current instance name in deploy.rb?

Hey guys,

first, thank you very much for this great work!

I'm using Capistrano to deploy my application on EC2 and run a masterless puppet environment. The current problem is that i need the current EC2 Instance Name (displayed when you execute "cap ec2:status" in the name section) to provision my servers with puppet like this:

namespace :puppet do
   task :provision do
      sudo("puppet apply --node_name_value=#{ec2.instance_name} #{current_path}/puppet/manifests/site.pp")
   end
end

So is there any chance to get the name of the EC2 instance capify currently deploying?

Thanks a lot for your help
Stephan

Error on deploy

What could cause this issue?

$cap staging deploy
  * 2014-08-28 18:07:22 executing `staging'
  * 2014-08-28 18:07:23 executing `multistage:ensure'
  * 2014-08-28 18:07:23 executing `deploy'
  * 2014-08-28 18:07:23 executing `ec2:deregister_instance'
  * 2014-08-28 18:07:23 executing `deploy:update'
 ** transaction: start
  * 2014-08-28 18:07:23 executing `deploy:update_code'
--> Updating code base with checkout strategy
*** [deploy:update_code] rolling back
 ** [deploy:update_code] exception while rolling back: Capistrano::NoMatchingServersError, `deploy:update_code' is only run for servers matching {:except=>{:no_release=>true}}, but no servers matched
`deploy:update_code' is only run for servers matching {:except=>{:no_release=>true}}, but no servers matched

Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.