end_host not working as expected

361 views
Skip to first unread message

Damon Powell

unread,
Sep 13, 2019, 1:13:15 PM9/13/19
to Ansible Project
Both end_host and end_play seem to both cause the job to skip all hosts. I know that only one host meets the condition so it should execute on 1 but exits for both. Am I missing something? I thought end_host would only end the play for the host that meets the when condition.


  tasks:
    - name: Pre java-1.8.*-openjdk package check
      raw: rpm -qa java-1.8.*-openjdk | wc -l
      register: package_precheck

    - block:
        - name: "end play for host host if nothing to upgrade"
          debug:
            msg: "nothing to upgrade, ending play for host"

        - meta: end_host
          when: package_precheck.stdout > 0


Kai Stian Olstad

unread,
Sep 14, 2019, 5:26:02 AM9/14/19
to ansible...@googlegroups.com
You should add a this debug
- debug: var=package_precheck

Then you'll see that stdout is a string not an int, so filter the variable through int

when: package_precheck.stdout | int > 0


--
Kai Stian Olstad

Damon Powell

unread,
Sep 14, 2019, 11:12:58 AM9/14/19
to Ansible Project
Thank you Kai, I ran in debug noticed it was a string. I updated the command but end_host still kills the entire run for all hosts. I have 2 for testing.

"stdout": "1",
"stdout": "0",

Above is the output. From that I'd expect the first host to be skipped and the 2nd host to continue to execute. At least that is how I'm reading end_host should work. end_play sounds like what is being used I've tried both, both behave the same.

Damon Powell

unread,
Sep 14, 2019, 11:43:44 AM9/14/19
to Ansible Project
I think its working now. I think part of my issue was that one of the host had python 2.4 and all the error messages from that was throwing me off. Changed that test node out for a diff one and the logic appears to be working now after changing > 0 to int > 0.

Thanks for the help Kai.


On Friday, September 13, 2019 at 12:13:15 PM UTC-5, Damon Powell wrote:

Damon Powell

unread,
Sep 14, 2019, 11:55:35 AM9/14/19
to Ansible Project
This was also throwing me off, it would be nice if there was a way around it as well.

Even though the logic is working and node1 stops after the check, the block output displays the same msg for all hosts. I would have thought that this would only show the msg for node1 as thats the node thta meets the end_host check. Node2 continues to run all other checks but the message is confusing as it first looks like its skipping both hosts but its really not.

TASK [end play for host host if nothing to upgrade] ****************************
ok: [node1.test.com] => {
    "msg": "Nothing to upgrade, ending play for host"
}
ok: [node2.test.com] => {
    "msg": "Nothing to upgrade, ending play for host"
}



On Friday, September 13, 2019 at 12:13:15 PM UTC-5, Damon Powell wrote:

Kai Stian Olstad

unread,
Sep 14, 2019, 6:03:09 PM9/14/19
to ansible...@googlegroups.com
On 14.09.2019 17:55, Damon Powell wrote:
> This was also throwing me off, it would be nice if there was a way
> around
> it as well.
>
> Even though the logic is working and node1 stops after the check, the
> block
> output displays the same msg for all hosts. I would have thought that
> this
> would only show the msg for node1 as thats the node thta meets the
> end_host
> check. Node2 continues to run all other checks but the message is
> confusing
> as it first looks like its skipping both hosts but its really not.
>
> TASK [end play for host host if nothing to upgrade]
> ****************************
> ok: [node1.test.com] => {
> "msg": "Nothing to upgrade, ending play for host"
> }
> ok: [node2.test.com] => {
> "msg": "Nothing to upgrade, ending play for host"
> }

That's because your when: is indented to fare.
It need to be on the same level as the block.


>> - block:
>> - name: "end play for host host if nothing to upgrade"
>> debug:
>> msg: "nothing to upgrade, ending play for host"
>>
>> - meta: end_host
>> when: package_precheck.stdout > 0

As you can see, the when is only on meta task so the debug in the block
will always run.

--
Kai Stian Olstad
Reply all
Reply to author
Forward
0 new messages