Ansible async_status fails when the async call interrupts the target network connection

Viewed 242

How can I call a task that temporarily interrupts network connectivity to the target when it runs.

I wrote a PowerShell ansible module that modifies the target windows network settings causing it to lose connectivity for around 30 seconds. The connection is to a windows 2019 server via winrm I need to know if the task succeeded or reports errors.

If I call the task normally, it will fail with host unreachable if the network is gone for more than read timeout (30) seconds. The operation may have succeeded, but I don't have access to its return values.

- win_vswitch:
    Name: "SomeSwitch"
    VLAN: 123
    state: present

Seems like a good use of async:

- name: Configure VSwitch
  win_vswitch:
    Name: "SomeSwitch"
    VLAN: 123
    state: present
  async: 600
  poll: 0
  register: async_result

- name: vswitch - wait for the async task to finish
  async_status:
    jid: "{{ async_result.ansible_job_id }}"
  register: task_result
  until: task_result.finished
  # ignore_unreachable: yes
  retries: 60
  delay: 5
  # failed_when: False

The problem is that if the async_status poll is unable to get a network connection to the target for more than read_timeout seconds, it fails with host unreachable error. Even if the async_status's timeouts haven't expired.

Seems to me that I just need to set the read timeout to a higher value. And that's where I'm stuck.

Things I've tried:

  • timeout in ansible.cfg
  • ansible_winrm_read_timeout_sec & ansible_winrm_operation_timeout_sec in the inventory host item
  • ignore_unreachable & failed_when in the async_status module
  • rescue clause around the async_status

Suggestions? TIA, Jeff

0 Answers
Related