Last line should be "might not work for your use case"
On Sat, May 31, 2014 at 12:24 PM, Michael DeHaan <[email protected]> wrote: > "- hosts: "{{ outgoing|default(['no-match']) }}[0]" > > In Ansible, the general rule is if something looks ungainly like this, > don't do it :) > > I would probably consider having one playbook that includes another list > of plays, and running either the top level one or the second one depending > on whether you need to do the second step. > > Might not work for you to me. > > > On Fri, May 30, 2014 at 1:15 PM, Steve Ims <[email protected]> wrote: > >> After closer inspection: The posted playbook works for bootstrap (first >> run), but not beyond. >> >> Seems that "outgoing" is not defined in the Jinja template on the second >> play, so the default value ('no-match') is always used. >> >> Seems that "groups" is also not available in the Jinja template (e.g. >> groups.outgoing). >> >> Is there a way to access groups within the template ("{{ ... }}") ? >> >> Thanks. >> >> >> >> On Thursday, May 29, 2014 1:44:44 PM UTC-4, Steve Ims wrote: >>> >>> Sorry for the spam, but I just stumbled upon a possible solution >>> <https://groups.google.com/forum/#!topic/ansible-project/eqNR_RdC0jg> that >>> uses Jinja's "default" filter. >>> >>> I modified hosts in the second play to default to a list with one item >>> that doesn't match any of our hosts. >>> >>> The 'no-match' still feels like a hack, but has allowed us to use one >>> playbook for bootstrap (first run) and beyond. >>> >>> Still appreciate any pointers if there's a better way :-) >>> >>> Thanks. >>> >>> >>> --- >>> - hosts: "group_{{ outgoing_version }}:&group2" >>> gather_facts: no >>> >>> tasks: >>> - group_by: key=outgoing >>> >>> >>> - hosts: "{{ outgoing|default(['no-match']) }}[0]" >>> gather_facts: no >>> >>> tasks: >>> - command: do some work >>> >>> >>> >>> On Thursday, May 29, 2014 12:57:42 PM UTC-4, Steve Ims wrote: >>>> >>>> Clarification: Our playbook also includes plays for the incoming >>>> servers interleaved with plays for the outgoing servers. Hoping to avoid >>>> one playbook for only incoming servers -- and another for incoming + >>>> outgoing servers (would have duplication). >>>> >>>> >>>> >>>> On Thursday, May 29, 2014 12:49:31 PM UTC-4, Steve Ims wrote: >>>>> >>>>> Michael's suggestion is working fine in our existing system. >>>>> >>>>> I've now hit a bootstrapping problem when applying this to a new >>>>> system, which results in "list index out of range" error. >>>>> >>>>> We're automating replacement of servers behind a reverse proxy from >>>>> one set to another. With each transition, we must execute a command on >>>>> one >>>>> of the outgoing servers. Our current playbook works fine when there is an >>>>> outgoing server -- but in a new system, there is no outgoing server on the >>>>> first run. >>>>> >>>>> Following is the relevant portion of our playbook. When applied on a >>>>> first run to our new system, "outgoing_version" is empty. The pattern >>>>> "group_:&group2" contains no hosts, so the first task is not run. Not >>>>> surprisingly, we then hit an error on the second hosts pattern because >>>>> "outgoing" is not defined. >>>>> >>>>> Is there a proper way to do this with Ansible? Perhaps some way to >>>>> mark the second play conditional on "outgoing" being defined? >>>>> >>>>> Thanks! >>>>> >>>>> >>>>> --- >>>>> - hosts: "group_{{ outgoing_version }}:&group2" >>>>> gather_facts: no >>>>> >>>>> tasks: >>>>> - group_by: key=outgoing >>>>> >>>>> >>>>> - hosts: outgoing[0] >>>>> gather_facts: no >>>>> >>>>> tasks: >>>>> - command: do some work >>>>> >>>>> >>>>> Console output while running the playbook: >>>>> >>>>> PLAY [group_{{outgoing_version}}:&group2] *** >>>>> skipping: no hosts matched >>>>> >>>>> PLAY [outgoing[0]] ****************************** >>>>> ********************** >>>>> Traceback (most recent call last): >>>>> ... >>>>> IndexError: list index out of range >>>>> >>>>> >>>>> >>>>> On Tuesday, May 27, 2014 6:00:45 PM UTC-4, Steve Ims wrote: >>>>>> >>>>>> Much better. >>>>>> >>>>>> Thanks for the example. Good lesson: Playbooks may contain multiple >>>>>> "hosts". >>>>>> >>>>>> Thanks for the help! >>>>>> >>>>>> >>>>>> On Sunday, May 25, 2014 4:58:45 PM UTC-4, Michael DeHaan wrote: >>>>>>> >>>>>>> The Ansible way would prefer it simpler. >>>>>>> >>>>>>> Here's how you select the first node out of a group: >>>>>>> >>>>>>> - hosts: groupname[0] >>>>>>> tasks: >>>>>>> - ... >>>>>>> >>>>>>> Here's how you select a node that is in two groups: >>>>>>> >>>>>>> - hosts: group1:&group2 >>>>>>> >>>>>>> Here's how you would select a node that is in two groups and make a >>>>>>> group of the union: >>>>>>> >>>>>>> - hosts: group1:&group2 >>>>>>> tasks: >>>>>>> - group_by: key=groupOneAndTwo >>>>>>> >>>>>>> Here's how you would then pick the first host out of that group >>>>>>> >>>>>>> - hosts: groupOneAndTwo[0] >>>>>>> tasks: >>>>>>> - shell: echo I am the first node in both! >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Sat, May 24, 2014 at 10:29 PM, Steve Ims <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Found a brute-force solution: >>>>>>>> >>>>>>>> $ ipaddr=$(ansible "tag_version_1:&tag_role_foo" --list-hosts | >>>>>>>> head -n 2 | tail -n 1) >>>>>>>> $ ansible ${ipaddr} -m ping >>>>>>>> >>>>>>>> -- >>>>>>>> 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/ >>>>>>>> 1d872c11-4b70-487b-810a-bf7bc0d0dedd%40googlegroups.com. >>>>>>>> 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/59f9c66f-c417-444e-a568-ffa8b4c171e8%40googlegroups.com >> <https://groups.google.com/d/msgid/ansible-project/59f9c66f-c417-444e-a568-ffa8b4c171e8%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/CA%2BnsWgwfEy97EWJ%3DrqcbdwzjnTHN1%2B8wZeyt%2BQKfReq129qjDw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
