If you're doing a lot with roles that change a lot, you might want to
consider using dynamic roles. See the "&block" section, here:

  http://wiki.capify.org/article/Role#.26block

- Jamis

On 1/22/09 9:34 AM, Gerhardus Geldenhuis wrote:
> That is brilliant clear, thanks.
> 
> Basically defining a task with a role safeguards you against using the
> task on a server where it would'nt make any sense.
> 
> I have been thinking of tasks as a bit more abstract. For me copy
> files to a apache server is a generic task but specific to webservers.
> However my server list is not static and might change 3 times a day
> and I have found it strange to include my server lists as part of my
> capistrano program. I guess you can import an external file that
> contains a list of servers and dynamically build your role members. It
> boils down to how you use capistrano.
> 
> Regards
> 
> On Jan 22, 4:14 pm, Jamis Buck <[email protected]> wrote:
>> On 1/22/09 4:12 AM, Gerhardus Geldenhuis wrote:
>>
>>> I have found this very usefull, however I do not understand the
>>> difference between HOSTS and HOSTFILTER. It would be great if you
>>> could explain it from another angle
>> I'll give it another try. Consider this concrete example. Suppose your
>> script defines three servers, A, B, and C. And it defines a task, "foo",
>> that (by default) wants to run on A and B, but not C. Like this:
>>
>>   role :app, "A", "B"
>>   role :web, "C"
>>
>>   task :foo, :roles => :app do
>>     run "echo hello"
>>   end
>>
>> Now, if you do "cap foo", it will run the echo command on both A and B.
>>
>> If you do "cap HOSTS=C foo", it will run the echo command on C,
>> regardless of the :roles parameter to the task.
>>
>> If you do "cap HOSTFILTER=C foo", it will not run the echo command at
>> all, because the intersection of (A B) and (C) is an empty set. (There
>> are no hosts in foo's host list that match C.)
>>
>> If you do "cap HOSTFILTER=A foo", it will run the echo command on only
>> A, because (A B) intersected with (A) is (A).
>>
>> Lastly, if you do "cap HOSTFILTER=A,B,C foo", it will run the echo
>> command on A and B (but not C), because (A B) intersected with (A B C)
>> is (A B).
>>
>> To summarize: HOSTS completely overrides the hosts or roles declaration
>> of the task, and forces everything to run against the specified host(s).
>> The HOSTFILTER, on the other hand, simply filters the existing hosts
>> against the given list, choosing only those servers that are already in
>> the tasks server list.
>>
>> Hope that's clearer,
>>
>> Jamis
>>
>>
>>
>>> Regards
>>> On Jan 21, 5:03 pm, Jamis Buck <[email protected]> wrote:
>>>> Try the HOSTS environment variable:
>>>>   cap HOSTS=app2.example.com production deploy
>>>> Note that doing this will treat app2 as being in every role, not just
>>>> whichever role(s) it happens to be declared in.
>>>> If what you want is to do a regular deploy, but only act on app2, and
>>>> only as app2 is declared in your recipe file, you can use the HOSTFILTER
>>>> variable instead:
>>>>   cap HOSTFILTER=app2.example.com production deploy
>>>> Sorry if the distinction isn't clear there. Let me know if you need more
>>>> clarification as to the difference between HOSTS and HOSTFILTER.
>>>> - Jamis
>>>> On 1/21/09 9:54 AM, Pete Hodgson wrote:
>>>>> Hi Folks,
>>>>> I have a system in production that has several servers in serveral
>>>>> roles. I would like to test a new app server by deploying to that
>>>>> specific server, without having to redeploy to every server in
>>>>> production. Is there a way to ask Capistrano to deploy to a specific
>>>>> server? Ideally I'd like to be able to run something like cap
>>>>> SERVER=app2.example.com ROLE=app production deploy if I just wanted to
>>>>> deploy to app2.example.com.
>>>>> I original posted this question on Stack Overflow a few days back [1]
>>>>> and got a few answers, but neither solution seemed to work for me.
>>>>> Hope it's not bad form to now post here.
>>>>> Cheers,
>>>>> Pete
>>>>> [1]http://stackoverflow.com/questions/429816/how-to-deploy-to-a-single-s...
> > 


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