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" <[email protected]> wrote:

> 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 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
> [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
> <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 [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/CAF-z5MtJiT86tKpxhO4%3DqggyRa37YGUOWRo%2BrPhFvAMLG2ncSQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to