any_errors_fatal doesn't fail with unreachable hosts

I’m trying to ping servers and fail immediately at the first one that is unreachable. However, this doesn’t seem to work. I found this old issue about it but apparently it hasn’t been resolved. https://github.com/ansible/ansible/issues/16475

What happens if you add serial:1 and max_fail_percentage:1 and removing any_errors_fatal directive?

It still continues on after failing, it just does so one host at a time.

PLAY [Ping] ******************************************************************************************************************************************************************

TASK [Ping Servers] **********************************************************************************************************************************************************
fatal: [myhost1]: UNREACHABLE! => {“changed”: false, “msg”: "Data could not be sent to remote host "myhost1". Make sure this host can be reached over ssh: ", “unreachable”: true}

NO MORE HOSTS LEFT ***********************************************************************************************************************************************************

NO MORE HOSTS LEFT ***********************************************************************************************************************************************************

PLAY [Ping] ******************************************************************************************************************************************************************

TASK [Ping Servers] **********************************************************************************************************************************************************
fatal: [myhost2]: UNREACHABLE! => {“changed”: false, “msg”: "Data could not be sent to remote host "myhost2". Make sure this host can be reached over ssh: ", “unreachable”: true}

NO MORE HOSTS LEFT ***********************************************************************************************************************************************************

NO MORE HOSTS LEFT ***********************************************************************************************************************************************************

PLAY [Ping] ******************************************************************************************************************************************************************

TASK [Ping Servers] **********************************************************************************************************************************************************

So, you guys think I should file an issue for this? I don’t know what else to do.

I’ve tried the following with a vanilla ansible.cfg (nothing but defaults)

mkdir ~/temp

➜ temp cat test.yml

  • hosts: all
    serial: 1
    max_fail_percentage: 1
    gather_facts: false
    tasks:
  • ping:

➜ temp cat inventory
[all]
unreachable
localhost
➜ temp ansible-playbook -i inventory test.yml -k
SSH password:

PLAY [all] ************************************************************************************************************************************************************************************

TASK [ping] ***********************************************************************************************************************************************************************************
fatal: [unreachable]: UNREACHABLE! => {“changed”: false, “msg”: “Failed to connect to the host via ssh: ssh: Could not resolve hostname unreachable: Name or service not known”, “unreachable”: true}

PLAY RECAP ************************************************************************************************************************************************************************************
unreachable : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0

As you can see it does not continue with localhost, which will succeed if I revert the inventory order.

Regards,

I don’t know what to tell you, it does for me.