I'm thinking about going down this road, if anyone has any better ideas,
please share. it seems as though it will work fine, just not sure if there
is a better/simpler/more appropriate solution.
---
- name: "get down hosts"
hosts: localhost
tasks:
# TODO: update to call a dynamic script/action plugin to populate
# with down hosts to be excluded
- name: add down host to group
add_host:
hostname: '{{ item }}'
groupname: "unreachable_hosts"
with_items:
- "host_unreachable"
- name: "unreachable test"
hosts: "*:!unreachable_hosts"
become: no
tasks:
- name: "success1"
copy:
content: "my stuff"
dest: /tmp/file.success1
On Wednesday, February 27, 2019 at 2:41:31 PM UTC-8, Adam E wrote:
>
> hi Brian, I was wondering if there is anything else you can suggest to
> me. I want to report a successful ansible run when the only thing that
> failed were unreachable hosts so that it returns success back to AWX.
>
> Is there a callback plugin or some local customization that I can write in
> the meantime and then contribute back to Ansible core?
>
> Or perhaps some sort of preprocessor that runs through the inventory and
> removes unreachable/down hosts?
>
> I am interested in two things:
> 1. any type of quick workaround. I tried the suggestion you mentioned
> with regards to the meta_clear_host_errors, but this didn't work. I posted
> the output below. Even if it did work, I would be concerned that it would
> clear other errors other than unreachable.
> 2. What is the correct long term solution (enhancement to ansible) to this
> problem, if you agree this would be useful and can provide some guidance of
> a solution you support and I can also work on a PR to add to the the core
> if it's not too complex. I think this would be useful.
>
>
> $ ansible-playbook -i inventories.unreachable/ unreachable2.yml ; echo
> "return
> code from run is: $?"
>
>
> PLAY [unreachable test] ********************************
>
>
> TASK [Gathering Facts] *******************************
> ok: [host_online]
> fatal: [host_unreachable]: UNREACHABLE! => {"changed": false, "msg": "Failed
> to connect to the host via ssh: ssh: connect to host 10.20.3.21 port 22:
> Connection timed out\r\n", "unreachable": true}
>
>
> TASK [success1] *****************************
> changed: [host_online]
>
>
> TASK [success1] **************************
> fatal: [host_unreachable]: UNREACHABLE! => {"changed": false, "msg": "Failed
> to connect to the host via ssh: ssh: connect to host 10.20.3.21 port 22:
> Connection timed out\r\n", "unreachable": true}
> to retry, use: --limit @/homenfs/aedwards/unreachable2.retry
>
>
> PLAY RECAP ******************
> host_online : ok=2 changed=1 unreachable=0 failed=
> 0
> host_unreachable : ok=0 changed=0 unreachable=2 failed=
> 0
>
>
> return code from run is: 4
>
>
> playbook:
> $ cat unreachable2.
> $ cat unreachable2.yml
> ---
>
>
> - name: "unreachable test"
> hosts: "*"
> become: no
>
>
> tasks:
>
>
> - name: "success1"
> copy:
> content: "my stuff"
> dest: /tmp/file.success1
>
>
> - meta: clear_host_errors
>
>
>
> On Wednesday, January 16, 2019 at 3:21:24 PM UTC-8, Brian Coca wrote:
>>
>> So what you are asking would be the 'default' way ansible operates, it
>> removes 'unreachable' hosts from the rest of the play and then
>> continues with the rest of the hosts.
>> > - any future tasks in the play against that host will not be run (no
>> point as they will all fail as host unreachable).
>> this is the default
>> > - the playbook will continue run all tasks against the other hosts that
>> are reachable
>> also the default
>> > - the playbook run will report success (return code = 0)
>> this is not the default, but you can have a `meta:
>> clear_host_errors` as your last task .. but this might be too big of a
>> hammer.
>>
>> There are some cases in which the above is not true, for example,
>> using serial, if all hosts in a 'serial batch' fail (unreachable
>> counts) then the whole play fails, you also have max_fail_percentage
>> to manage how many failures you tolerate.
>>
>>
>> ----------
>> Brian Coca
>>
>
--
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/533c83f4-8d1f-4c3a-b791-7501069248e7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.