I forgot to bold the new tasks after I said they'd be bold... In case it 
isn't very obvious they are the only two shown that use 'with_nested:'

On Tuesday, May 26, 2015 at 12:02:44 PM UTC-5, Mark Casey wrote:
>
> James (and list),
>
> Thanks for the feedback on this back when... I just got a semi-permanent 
> solution added that I wanted to share/see if I could get any thoughts on.
>
> I added a couple tasks in my VM provisioning Ansible roles that process a 
> new fact named "additional_roles" (with 'roles' in this context meaning 
> "things this host does". I need to do some term-fixing... this is using 
> 'role', 'service', and 'type' fairly interchangably... but anyway)
>
>
> This is the call which would set the new fact, and 'provider' may be ec2, 
> rax, vagrant, or etc.:
>
>   roles:
>>     - role: '{{ provider }}/{{ provider }}_add'
>>       type: dbnode
>>       additional_roles: webnode
>>       count: 1
>>
>
> and then the tasks within the ec2_add role, for example (*new tasks in 
> bold*):
>
> ---
>>
>> - name: Set up a new host instance on EC2
>>   local_action:
>>     module: ec2
>>     region: "{{ region }}"
>>
>>   ... ...
>>
>>   register: ec2
>>
>> - name: Add instance(s) to group representing type of host such as 
>> webnode or dbnode
>>   local_action: add_host hostname={{ item.private_ip }} 
>> ansible_ssh_host={{ item.private_ip }} groupname={{ type }}
>>   with_items: ec2.tagged_instances
>>   when: wait == "yes"
>>
>> - name: Add instance(s) to combo service_type group, such as prod_dbnode, 
>> or staging_webnode
>>   local_action: add_host hostname={{ item.private_ip }} 
>> ansible_ssh_host={{ item.private_ip }} groupname="{{ service }}_{{ type }}"
>>   with_items: ec2.tagged_instances
>>   when: wait == "yes"
>>
>> - name: Add instance(s) to group representing type of host such as 
>> webnode or dbnode
>>   local_action: add_host hostname={{ item[0].private_ip }} 
>> ansible_ssh_host={{ item[0].private_ip }} groupname={{ item[1] }}
>>   with_nested:
>>     - ec2.tagged_instances
>>     - additional_roles
>>   when: wait == "yes"
>>
>> - name: Add instance(s) to combo service_type group, such as prod_dbnode, 
>> or staging_webnode
>>   local_action: add_host hostname={{ item[0].private_ip }} 
>> ansible_ssh_host={{ item[0].private_ip }} groupname="{{ service }}_{{ 
>> item[1] }}"
>>   with_nested:
>>     - ec2.tagged_instances
>>     - additional_roles
>>   when: wait == "yes" 
>>
>
>
>
> So, the method for my original goal of 3 consul nodes and 2 ldap nodes 
> would be:
>
>   roles:
>>     - role: '{{ provider }}/{{ provider }}_add'
>>       type: consul
>>       additional_roles: ldap
>>       count: 2
>>
>>   roles:
>>     - role: '{{ provider }}/{{ provider }}_add'
>>       type: consul
>>       count: 1
>>
>>
> Thanks,
> Mark
>
>
> On Thursday, December 11, 2014 at 2:04:08 PM UTC-6, James Cammarata wrote:
>>
>> Hi Mark, the way you're planning is the correct way to do this, however 
>> you could use a conditional on the ldap role such that it would only run if 
>> the consul_ldap group was in the current host's groups:
>>
>> - { role: consul_ldap, when: "'consul_ldap' is in group_names" }
>>
>> I don't really recommend doing that, but it's there should you decide to 
>> use it.
>>
>>
>> On Thu, Dec 11, 2014 at 12:47 PM, Mark Casey <[email protected]> wrote:
>>
>>> Hello,
>>>
>>> I have a group of servers in EC2 that will be a cluster of Consul server 
>>> nodes, but on some of them I also want to run LDAP.
>>>
>>> I believe in a static inventory file this would be:
>>>
>>> [consul]
>>> server1
>>> server2
>>> server3
>>>
>>> [ldap]
>>> server1
>>> server 2
>>>
>>> I'm using the pattern from the EC2 guide of calling out to the ec2 
>>> module to create or persist/no-op the instances and then using add_host to 
>>> group them (so it does ec2/add_host during every call to ansible-playbook). 
>>> I'm passing 'type: consul' in to the ec2 role which ends up in some of the 
>>> naming tags and being used for idempotence/exact_count.
>>>
>>> My question is: Where do I create the second group ('ldap')?
>>>
>>> I'm kind of hoping I could slice the existing 'consul' group into an 
>>> ldap group or start a play (within the same run of ansible-playbook) on 
>>> only some of the hosts in the consul group:
>>>
>>> - name: Create instances
>>>   hosts: localhost
>>>   connection: local
>>>   roles:
>>>     - role: ec2
>>>       type: consul
>>>       count: 3
>>>
>>> - name: Install Consul
>>>   hosts: consul
>>>   roles:
>>>     - role: consul
>>>
>>> - name: Install LDAP
>>>   hosts: *"A subset of 'consul', or a new 'ldap' subgroup created from 
>>> a subset of 'consul'"*
>>>   roles:
>>>     - role: ldap
>>>
>>>
>>> And finally... the catch.
>>>
>>> I'm using just enough tags to name the instances and get 
>>> 'count_tags'+'exact_count' to work with the EC2 module. I'd rather not add 
>>> more tags to get an 'ldap' group out of ec2.py because I want to be able to 
>>> use this with other cloud providers (existing playbooks already work with 
>>> EC2 and Rackspace). In the past I've found that some providers may only 
>>> support one tag/group, may not allow changing groups via API, or don't do 
>>> tags/groups at all and impotence is based on the instance name alone.
>>>
>>> I'm hoping I'm overlooking an obvious fix but right now I'm planning to 
>>> do:
>>>
>>> - name: Create instances
>>>   hosts: localhost
>>>   connection: local
>>>   roles:
>>>     - role: ec2
>>>       type: consul_ldap
>>>       count: 2
>>>     - role: ec2
>>>       type: consul
>>>       count: 1
>>>
>>> - name: Install Consul
>>>   hosts: *consul_ldap:consul*
>>>   roles:
>>>     - role: consul
>>>
>>> - name: Install LDAP
>>>   hosts: consul_ldap
>>>   roles:
>>>     - role: ldap
>>>
>>>
>>> Thanks,
>>> Mark
>>>
>>> -- 
>>> 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/24334d89-61fa-45ef-b1f1-8a71c67e7ff4%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/ansible-project/24334d89-61fa-45ef-b1f1-8a71c67e7ff4%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/201184d4-3a7a-45bb-85a2-543f2b0db4c7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to