"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- >>>> talk/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%2BnsWgym88h0GsehetMbygfPGwzvKJTkgmNs0fabhmCdgN%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/CACkJihNU1xdY75QXkub2yVBR19XsWy7zXJBsbzhu4uWu1GMH4A%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/CA%2BnsWgwpixvU55Jzy6OuP3Qd0nQ%3DZsGe%2BnmzmE1jeSBPwHBQHQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
