Let me try:

I've got project-specific playbooks like the following. They just specify 
the roles which the projects need to work with:

# Ansible playbook.
# Has to be included in a top level playbook and the hosts variable set.
---
- hosts: "{{ hosts }}"
  roles:
    - { role: my.lamp }
    - { role: my.solr }
    # ...


Then, I've got environment specific playbooks which setup the environment 
and run the project specific playbook, like for vagrant:

# Do some initial vagrant specific setup.
- hosts: vagrant
  roles:
    - { role: my.vagrant_guest, tags: vagrant_guest }
    - { role: my.nullmailer, tags: nullmailer }
    #...

# Provision vagrant nodes.
- include: ../path/to/above-playbook.yml hosts="vagrant"


So problem with that is now that shared-dependencies between the two plays 
are not detected as shared dependencies: If the project specific playbook 
lamp depends on role PHP and the vagrant playbook contains another role 
depending on role PHP, role PHP will unnecessarily run twice :-/

I've tried to provide only variables including the list of the roles in 
there - instead of having a simple playbook, but I found no way to merge 
the roles later in the master playbook (e.g. vagrant). I tried the 
following (does not work):

roles: project_roles +
    - { role: vagrant_guest }

Is there any way to avoid that or to achieve the same in a better way? 
Thinking about it, includes on the role level would be a good way to solve 
it. Could something like the following work?

roles:
  - include: project-roles.yml
  - { role: vagrant_guest }













Am Freitag, 5. September 2014 21:13:33 UTC+2 schrieb Michael DeHaan:
>
> Sorry I'm having trouble processing the above, can you simplify the 
> question?
>
>
>
>
> On Fri, Sep 5, 2014 at 5:49 AM, Wolfgang Ziegler <[email protected] 
> <javascript:>> wrote:
>
>> >I don't know what "stopped working" means, so when you say something 
>> doesn't work, I'd need to see output.
>>
>> I posted about that issue over at 
>> https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/ansible-project/Fd8HJ2bgTeE/a51DBhXmavgJ
>>  
>> - the problem is the variable in the playbook include.
>>
>>
>> >I'm also unclear what the value for playbook was and would need to see 
>> the file in context, whereas it seems to be an incomplete snippet above, so 
>> it's hard to say what I should suggest.
>>
>> The include playbook does not include more than a list of roles I want to 
>> apply. The use case is the following:
>>  - We have multiple projects/apps in our company, where each project 
>> requires some different roles as environment. So in additiona to a file 
>> with custom variables, I want to be able to define the roles being 
>> necessary for the project. Right now we have a simple playbook which only 
>> consists of a short list of required roles for that (see first example 
>> playbook). Then, this playbook is picked up to provision different machines 
>> for the project, e.g. a vagrant box or some staging environment. For that 
>> we've got different master playbooks (vagrant, staging, ..) where it 
>> provisions the environment + includes the project specific playbook to take 
>> care of project specifics.
>>
>> For that, having a simple playbook which only consists of a short list of 
>> required roles seems a good fit here. Having the roles specified in some 
>> sort of variable would be possible as well, but I'd prefer to not have to 
>> pre-define the list of possible roles somewhere.
>>
>>
>> It sounds like you are applying the same role to the same hosts in more 
>>> than one play, in which case they will run twice, basically because they 
>>> were asked to do so :)
>>>
>>
>> If the project specific playbook contains role A depending on role B and 
>> the environment-provision playbook (e.g. staging) contains role C depending 
>> on role B, role B will unnecessarily run twice as it runs in two different 
>> plays. If I could merge the list of roles into a single play, ansible would 
>> detect the shared dependency and run role B only once. That would be 
>> optimal then - that's why I'm asking whether there is a way the roles 
>> somehow?
>>
>>
>> Thanks for your help!
>>
>>
>>
>> Am Freitag, 5. September 2014 03:36:38 UTC+2 schrieb Michael DeHaan:
>>>
>>> I don't know what "stopped working" means, so when you say something 
>>> doesn't work, I'd need to see output.   I'm also unclear what the value for 
>>> playbook was and would need to see the file in context, whereas it seems to 
>>> be an incomplete snippet above, so it's hard to say what I should suggest.
>>>
>>> I also do not understand this part of the equation:  "Besides that, the 
>>> solution isn't optimal as afterwards I've to run some more roles on the 
>>> same hosts, but if the dependencies of both roles overlap the dependencies 
>>> get now executed twice."
>>>
>>> It sounds like you are applying the same role to the same hosts in more 
>>> than one play, in which case they will run twice, basically because they 
>>> were asked to do so :)
>>>
>>>
>>>
>>>
>>> On Thu, Sep 4, 2014 at 3:59 PM, Wolfgang Ziegler <[email protected]> 
>>> wrote:
>>>
>>>> I've a setup of multiple projects, where each project specified the 
>>>> roles it works with via a playbook like the following:
>>>>
>>>> # Ansible playbook.
>>>> # Has to be included in a top level playbook and the hosts variable set.
>>>> ---
>>>> - hosts: "{{ hosts }}"
>>>>   roles:
>>>>     - { role: somerole }
>>>> Code hier eingeben...
>>>>
>>>> Now I include this in the main playbook like the following:
>>>>
>>>>   include: "{{ playbook }} hosts=some-hosts"
>>>>
>>>> Now, there is the problem that in 1.7.1 this stopped working due to the 
>>>> variable in the include, which I already mentioned over at 
>>>> https://groups.google.com/forum/#!searchin/ansible-
>>>> project/playbook$20include/ansible-project/Fd8HJ2bgTeE/QZM9QwBqEEMJ.
>>>>
>>>> Besides that, the solution isn't optimal as afterwards I've to run some 
>>>> more roles on the same hosts, but if the dependencies of both roles 
>>>> overlap 
>>>> the dependencies get now executed twice. Instead, I'd love to be able to 
>>>> merge both playbooks into one or have a way to include some additional 
>>>> roles in one main play - that way the dependencies would be properly 
>>>> handled.
>>>>
>>>> I'd tried something like following:
>>>>
>>>> # Ansible playbook.
>>>> ---
>>>> - hosts: my-hosts
>>>>   vars_files:
>>>>     - "{{ vars-with-roles-specified }}"
>>>>   roles: defined_roles +
>>>>     - { role: another_role }
>>>> Code hier eingeben...
>>>>
>>>> However it seems that roles cannot be specified using variables at all. 
>>>> Any suggestions on how to achieve that best?
>>>>  
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Ansible Project" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> To view this discussion on the web visit https://groups.google.com/d/
>>>> msgid/ansible-project/8e55db1f-acba-40d2-b0a8-
>>>> 618e57d41ff2%40googlegroups.com 
>>>> <https://groups.google.com/d/msgid/ansible-project/8e55db1f-acba-40d2-b0a8-618e57d41ff2%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Ansible Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ansible-project/6181a5fb-4977-4901-9f33-eba631752e6c%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ansible-project/6181a5fb-4977-4901-9f33-eba631752e6c%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/90de5410-ced9-49d4-8c28-287909ae015e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to