I came to the same conclusion: We have separate playbooks now.

Learned a lot along the way.

Thanks for the comments!
On May 31, 2014 12:24 PM, "Michael DeHaan" <mich...@ansible.com> wrote:

> Last line should be "might not work for your use case"
>
>
>
>
>
> On Sat, May 31, 2014 at 12:24 PM, Michael DeHaan <mich...@ansible.com>
> 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 <steven.d....@gmail.com>
>> 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 <steven...@gmail.com>
>>>>>>>> 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 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/
>>>>>>>>> 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 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/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 a topic in the
> Google Groups "Ansible Project" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/ansible-project/cuegEj7M0KA/unsubscribe.
> To unsubscribe from this group and all its topics, 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%2BnsWgwfEy97EWJ%3DrqcbdwzjnTHN1%2B8wZeyt%2BQKfReq129qjDw%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgwfEy97EWJ%3DrqcbdwzjnTHN1%2B8wZeyt%2BQKfReq129qjDw%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/CAF-z5MtJiT86tKpxhO4%3DqggyRa37YGUOWRo%2BrPhFvAMLG2ncSQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to