" would also find it useful to be able to define a group as an intersection
of two groups. It's something I've wanted for a while but just haven't
gotten around to submitting a feature request for."

This is not something we'd be interested in, most likely, as it's already
doable from the host spec.

As a matter of saving time with the ticket system, always a good idea to
discuss possible features on ansible-devel first to see if we have good
solutions for them, and if we agree, maybe then it becomes a ticket.




On Thu, Aug 14, 2014 at 10:05 PM, Lorin Hochstein <
[email protected]> wrote:

> I would also find it useful to be able to define a group as an
> intersection of two groups. It's something I've wanted for a while but just
> haven't gotten around to submitting a feature request for.
>
> If I use the "hosts: dbservers:&production:&northeast" syntax in N
> playbooks, then I have N opportunities to make a typo that will have very
> bad consequences (leaving out the & by mistake).
>
> Also, if I was able to define a group called
> dbservers_production_northeast, and then I decided to change the definition
> of the group, I'd only have to change it in one place. If I use it in N
> places, I'd have to go and change dbservers:&production:&northeast in N
> places. Yuck.
>
> Relying on the "--limit" argument of ansible-playbook is even more
> error-prone: there's a risk of applying the playbook to the wrong hosts
> *every time* the playbook is invoked by forgetting the --limit argument.
>
> It would be useful if ansible supported pattern syntax for defining
> children groups, so users could do something like this:
>
> [dbservers_production_northeast:children]
> dbservers:&production:&northeast
>
>
>
> On Thu, Aug 14, 2014 at 6:32 PM, Michael DeHaan <[email protected]>
> wrote:
>
>> It's not an issue of declarative vs imperative here, but saying "talk to
>> these groups".
>>
>> The children are not technically unions either, they are child
>> relationships.
>>
>>
>>
>>
>> On Thu, Aug 14, 2014 at 5:54 PM, Dominic Bou-Samra <[email protected]>
>> wrote:
>>
>>> Perhaps I am doing it wrongly (thus the idiomatic keyword), but I find
>>> that less declarative then being able to define intersections in groups.
>>>
>>>
>>> On Friday, August 15, 2014 3:25:35 AM UTC+10, Michael DeHaan wrote:
>>>
>>>>  "I can create a new a group as a union of other groups (groups of
>>>> groups), but AFAIK there's no way to create a new group as the intersection
>>>> of other groups."
>>>>
>>>> Shouldn't be needed in the inventory file, as this is something you can
>>>> address using the host spec:
>>>>
>>>> - hosts: alpha:&beta
>>>>
>>>> or also
>>>>
>>>> - hosts: alpha
>>>>
>>>> with
>>>>
>>>> ansible-playbook foo.yml --limit beta
>>>>
>>>> Either of these could be used to apply tags.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Thu, Aug 14, 2014 at 9:42 AM, Lorin Hochstein <
>>>> [email protected]> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Thu, Aug 14, 2014 at 7:42 AM, Michael DeHaan <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> "You are right about the intersection of groups - it's a shame you
>>>>>> cannot declare hosts like (excuse any syntax issues - code looks funny 
>>>>>> on a
>>>>>> phone):"
>>>>>>
>>>>>> Can you elaborate on what you think is missing?  ":children" to
>>>>>> define child groups is how that part works, so I'm missing the
>>>>>> understanding of what part you find lacking there.
>>>>>>
>>>>>>
>>>>> I can create a new a group as a union of other groups (groups of
>>>>> groups), but AFAIK there's no way to create a new group as the 
>>>>> intersection
>>>>> of other groups.
>>>>>
>>>>> For instance, if I have a group named "atlanta" and a group named
>>>>> "webservers", there's no way to define a group called "atlanta_webservers"
>>>>> that refers to the intersection of those two groups. You have to do 
>>>>> "hosts:
>>>>> atlanta:&webservers" in plays.
>>>>>
>>>>> Intersections would be really useful because I want to tag my EC2
>>>>> instances like:
>>>>>
>>>>> type=webserver
>>>>> env=production
>>>>>
>>>>> And then define a "production_webservers" group as the intersection of
>>>>> these.
>>>>>
>>>>> Lorin
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> On Wed, Aug 13, 2014 at 3:12 AM, Dominic Bou-Samra <[email protected]
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi Lorin,
>>>>>>>
>>>>>>> Thanks for replying.
>>>>>>>
>>>>>>> So the above presentation is exactly the solution we had arrived at
>>>>>>> in our Ansible spikes. I wish I had seen that 1 week ago :P.
>>>>>>>
>>>>>>> You are right about the intersection of groups - it's a shame you
>>>>>>> cannot declare hosts like (excuse any syntax issues - code looks funny 
>>>>>>> on a
>>>>>>> phone):
>>>>>>>
>>>>>>> [staging]
>>>>>>> [staging:children]
>>>>>>> tag_env_staging
>>>>>>>
>>>>>>> [transporters]
>>>>>>> [transporters:children]
>>>>>>> tag_type_transporter
>>>>>>>
>>>>>>> [staging_transporters]
>>>>>>> [staging_transporters:children]
>>>>>>> staging
>>>>>>> transporters
>>>>>>>
>>>>>>> And then in your playbook, declare:
>>>>>>>
>>>>>>> hosts: staging_transporters
>>>>>>>
>>>>>>>  But perhaps it's better to pass in variables like:
>>>>>>>
>>>>>>> // configure all staging transporters in us-east-1. Staging
>>>>>>> inventory declares group_var with staging param
>>>>>>> ansible-playbook -i staging -e zone=us-east-1 transporter.yml
>>>>>>>
>>>>>>> With transporter.yml looking like:
>>>>>>>
>>>>>>> - name: Config transporters
>>>>>>>   hosts: {{environment}}:&{{zone}}:&transporters
>>>>>>>
>>>>>>> What do you think of that?
>>>>>>>
>>>>>>> On Tuesday, August 12, 2014 12:39:26 PM UTC+10, Lorin Hochstein
>>>>>>> wrote:
>>>>>>>>
>>>>>>>>  Hi Dominic:
>>>>>>>>
>>>>>>>> To support mixing static with dynamic inventory, have the
>>>>>>>> "hostfile" entry in your ansible.cfg point to a directory instead of a
>>>>>>>> file. For example, my ansible.cfg contains:
>>>>>>>>
>>>>>>>> [defaults]
>>>>>>>> hostfile = inventory
>>>>>>>>
>>>>>>>> And my inventory directory looks like this:
>>>>>>>>
>>>>>>>> inventory/hosts
>>>>>>>> inventory/ec2.py
>>>>>>>> inventory/ec2.ini
>>>>>>>>
>>>>>>>> The inventory/hosts file is a static Ansible inventory file. The
>>>>>>>> inventory/ec2.py and inventory/ec2.ini are the dynamic inventory 
>>>>>>>> parts. You
>>>>>>>> can edit ec2.ini to specify which regions you want, the example ec2.ini
>>>>>>>> file that ships with ansible is pretty clear on how to do this.
>>>>>>>>
>>>>>>>> I gave a talk on this topic a few months back, the slides may not
>>>>>>>> mean too much without me talking (they're pretty sparse) but here they 
>>>>>>>> are:
>>>>>>>> http://go-talks.appspot.com/github.com/lorin/camp-devops-tal
>>>>>>>> k/talk.slide
>>>>>>>>
>>>>>>>> You can provision instances using the ec2 module. I recommend that
>>>>>>>> you use tags when you do provisioning because ec2.py will automatically
>>>>>>>> create groups based on tags. One gotcha here is that ec2.py will cache 
>>>>>>>> by
>>>>>>>> default, so if you want to launch an instance and then configure it
>>>>>>>> immediately after it comes up, you'll need to disable caching before in
>>>>>>>> ec2.ini (set cache_max_age=0).
>>>>>>>>
>>>>>>>> If you want to do "Australian transporters in production", I don't
>>>>>>>> think you can actually define a new group as an intersection of 
>>>>>>>> groups, so
>>>>>>>> you'd have to specify the hosts by explicitly doing the intersection of
>>>>>>>> groups:
>>>>>>>>
>>>>>>>> hosts: australia:&transports:&production
>>>>>>>>
>>>>>>>> (where "australia", "transports" and "production" are all groups
>>>>>>>> that I have assumed you have created via tags).
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Monday, August 11, 2014 3:21:47 AM UTC-4, Dominic Bou-Samra
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>  Hi all,
>>>>>>>>>
>>>>>>>>> I've been playing with Ansible as a solution to our deployment
>>>>>>>>> infrastructure. Our stack is:
>>>>>>>>>
>>>>>>>>>    - Dozens of "transporters" running on EC2.
>>>>>>>>>    - Dozens of "detectors" running on EC2
>>>>>>>>>    - Production and staging environments
>>>>>>>>>    - Multiple regions (atm US East and Sydney)
>>>>>>>>>
>>>>>>>>> What I require from Ansible is:
>>>>>>>>>
>>>>>>>>>    - A dynamic inventory, MIXED IN with a static group
>>>>>>>>>    declaration. I would like to be able to refer to my "Australian
>>>>>>>>>    transporters in production", as easily as possible. I would like no
>>>>>>>>>    IP's/hostnames stored locally (i.e, use EC2.py as a dynamic 
>>>>>>>>> inventory).
>>>>>>>>>    - Ability to provision new EC2 instances in any region, in any
>>>>>>>>>    environment.
>>>>>>>>>    - As little duplication as possible.
>>>>>>>>>
>>>>>>>>> I am struggling with trying to lay my project out so that I can
>>>>>>>>> achieve these goals.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Could anyone provide me with some suggestions or example layouts,
>>>>>>>>> ideally with sample command? Let me know if you need more information 
>>>>>>>>> and
>>>>>>>>> what I have so far
>>>>>>>>>
>>>>>>>>  --
>>>>>>> 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/
>>>>>>> fb2e7d05-0664-445a-81a9-64c6b2a8ab0e%40googlegroups.com
>>>>>>> <https://groups.google.com/d/msgid/ansible-project/fb2e7d05-0664-445a-81a9-64c6b2a8ab0e%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 a topic in
>>>>>> the Google Groups "Ansible Project" group.
>>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/
>>>>>> topic/ansible-project/Ohx3KEYwZdw/unsubscribe.
>>>>>>  To unsubscribe from this group and all its topics, 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/CA%2BnsWgym88h0GsehetMbygfPGwzvKJ
>>>>>> TkgmNs0fabhmCdgN%2BD8w%40mail.gmail.com
>>>>>> <https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgym88h0GsehetMbygfPGwzvKJTkgmNs0fabhmCdgN%2BD8w%40mail.gmail.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/CACkJihNU1xdY75QXkub2yVBR19XsW
>>>>> y7zXJBsbzhu4uWu1GMH4A%40mail.gmail.com
>>>>> <https://groups.google.com/d/msgid/ansible-project/CACkJihNU1xdY75QXkub2yVBR19XsWy7zXJBsbzhu4uWu1GMH4A%40mail.gmail.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/37de6fe4-748e-444e-be96-1508ded8675c%40googlegroups.com
>>> <https://groups.google.com/d/msgid/ansible-project/37de6fe4-748e-444e-be96-1508ded8675c%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 a topic in the
>> Google Groups "Ansible Project" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/ansible-project/Ohx3KEYwZdw/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, 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/CA%2BnsWgxy6d2Os1nX0ADQumK%2BRLcjKbqLv_qei7-eDy0%3DR0xqyQ%40mail.gmail.com
>> <https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgxy6d2Os1nX0ADQumK%2BRLcjKbqLv_qei7-eDy0%3DR0xqyQ%40mail.gmail.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/CACkJihMfwk%3D9jBENe5WsZsnjNBprGkv82kOQ3g%2BUx660CcSMZg%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CACkJihMfwk%3D9jBENe5WsZsnjNBprGkv82kOQ3g%2BUx660CcSMZg%40mail.gmail.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/CA%2BnsWgwLnKvTVFOJMza2hcJynNDH8%2BMOksd_tz5-Yr6rkp%2B1sA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to