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] 
> <javascript:>> 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] <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/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/dafc4cc1-055f-4686-adc4-f8a49c73d2dd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to