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/ae6ed80c-d6e4-4656-b36a-5f5abc9b669c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to