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/761c0a49-4e12-49b3-b8aa-dc6d3739f3bb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.