If it were me, I'd define each server in two roles, :server, and then  
either :even or :odd.

   %w(test01 test02 test03 test04).each_with_index do |host, index|
     which = (index+1) % 2 == 0 ? :even : :odd
     server(host, :server, which)
   end

   task :stop_odd, :roles => :odd do
     # ...
   end

Alternatively, if you're masochistic ;) you can specify a proc as the  
value of the :hosts key, and return the servers you want that way.  
Something like this:

   %w(test01 test02 test03 test04).each_with_index do |host, index|
     role :server, host, :machine => index+1
   end

   select_odd_hosts = Proc.new do
     find_servers(:roles => :server).select { |s| s.options[:machine]  
% 2 == 1 }
   end

   task :stop_odd, :hosts => select_odd_hosts do
     # ...
   end

- Jamis

On May 2, 2008, at 2:00 PM, alpduhuez wrote:

>
> Hello...
> I'm new to Capistrano, love it so far, great tool.  I am trying to
> have more than one condition to select a task.  I have lots of servers
> and would like to deploy to them in groups of odd/even.  Here is what
> I am trying to do, is this possible with some syntax?
>
> I have a server defined as:
>  role :server, "test01", :machine => 1
>  role :server, "test02", :machine => 2
> role :server, "test03", :machine => 3
>
>   task :stop_odd, :roles => :server, :only => { :machine =>
> 1, :machine => 3 , :machine => 5  } do
>    run "echo Hello, $HOSTNAME"
>  end
>
> This way only the last entry is used.  I also tried:
>
> task :stop_odd, :roles => :server, :only => { :machine => 1
> || :machine => 3 || :machine => 5  } do
>    run "echo Hello, $HOSTNAME"
>  end
>
> I also tried expressions but that didn't work either.  Is there some
> way to do this?
>
> Thanks!
> >


--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---

Reply via email to