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.

Reply via email to