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 <domleb...@gmail.com> 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 <lorin.h...@sendgrid.com >> > wrote: >> >>> >>> >>> On Thu, Aug 14, 2014 at 7:42 AM, Michael DeHaan <mic...@ansible.com> >>> 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 <doml...@gmail.com> >>>> 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 ansible-proje...@googlegroups.com. >>>>> >>>>> To post to this group, send email to ansible...@googlegroups.com. >>>>> 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 >>>> ansible-proje...@googlegroups.com. >>>> >>>> To post to this group, send email to ansible...@googlegroups.com. >>>> 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 ansible-proje...@googlegroups.com. >>> To post to this group, send email to ansible...@googlegroups.com. >>> 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 ansible-project+unsubscr...@googlegroups.com. > To post to this group, send email to ansible-project@googlegroups.com. > 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 the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscr...@googlegroups.com. To post to this group, send email to ansible-project@googlegroups.com. 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. For more options, visit https://groups.google.com/d/optout.