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] > <javascript:>> wrote: > >> >> >> On Thu, Aug 14, 2014 at 7:42 AM, Michael DeHaan <[email protected] >> <javascript:>> 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] >>> <javascript:>> 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] <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/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] <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/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] <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/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/37de6fe4-748e-444e-be96-1508ded8675c%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
