Dan, See http://groups.google.com/group/capistrano/browse_thread/thread/c4885d34f951594e/81d8ab68f9da364f.
Joe On Oct 4, 9:39 am, Dan Powell <[EMAIL PROTECTED]> wrote: > I'm trying to set up a capfile that will execute certain different > instructions for the same "task" on two different roles. In other > words, during my "finalize_update" I need to set up some different > links depending on the tier of the application. The only way I could > think to do this was to have the main "finalize_update" task call two > child tasks that each have the appropriate role restriction. My > problem is that when I try to just update one tier (using the ROLES > environment variable) it executes both of the child tasks, even though > one of them is restricted to a role other than the one I specified. > It seems it only evaluates the ROLES variable to determine invocation > of the top level task, but then any tasks that it calls are executed > regardless of their role restriction. What is particularly > interesting, I suppose, is that it doesn't run the child task on my > excluded role on the hosts for that role, but rather runs both tasks > on the hosts of the role that I did specify, even though they aren't > in that role. > > Is there a better way to do conditional logic by role for a task that > is common to multiple roles? Shouldn't the role restrictions be > enforced even for called tasks? > > My capfile - somewhat modified :) > > role :alpha, "alpha01", "alpha02" > role :beta, "beta01", "beta02" > > task :both do > alpha_only > beta_only > end > > task :alpha_only, :roles => :alpha do > run "echo 'only on alpha'" > end > > task :beta_only, :roles => :beta do > run "echo 'only on beta'" > end > > Which results in: > > -bash-3.00$ cap main ROLES=alpha > * executing `both' > * executing `alpha_only' > * executing "echo 'only on alpha'" > servers: ["alpha01", "alpha02"] > [alpha01] executing command > [alpha02] executing command > ** [out :: alpha02] only on alpha > ** [out :: alpha01] only on alpha > command finished > * executing `beta_only' > * executing "echo 'only on beta'" > servers: ["alpha01", "alpha02"] > [alpha01] executing command > [alpha02] executing command > ** [out :: alpha02] only on beta > ** [out :: alpha01] only on beta > command finished --~--~---------~--~----~------------~-------~--~----~ To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/capistrano -~----------~----~----~----~------~----~------~--~---
