Я пытаюсь выполнить вызов API, который иногда прерывается с первой попытки, но завершается успешно со второй попытки. Поэтому мне нужно, чтобы задача Ansible повторялась несколько раз, пока состояние ответа не станет 200 (ОК).
При использовании указанных ниже задач оно работает как положено.
---
- hosts: localhost
gather_facts: no
vars:
ip:
- 10.0.0.1
- 10.0.0.2
tasks:
- name: "Get host by IP"
uri:
url: "http://cpi.com/webacs/api/v4/data/Devices.json?.full=true&ipAddress={{ item }}"
method: GET
status_code: 200
register: apiResult
loop: "{{ ip }}"
retries: 1
delay: 5
until: apiResult.status == 200
Однако, когда Я хочу сделать это с помощью asyn c из-за большого количества хостов, которые мне нужно проверить, это не работает, так как кажется, что статус ключа отсутствует. Вместо этого вывод помещается в файл результатов. Я пробовал несколько вещей здесь, например поиск этого файла результатов (который содержит код состояния в json), но это также, похоже, не работает.
---
- hosts: localhost
gather_facts: no
vars:
ip:
- 10.0.0.1
- 10.0.0.2
tasks:
- name: "Get host by IP"
uri:
url: "http://cpi.com/webacs/api/v4/data/Devices.json?.full=true&ipAddress={{ item }}"
method: GET
status_code: 200
register: asyncApiResult
loop: "{{ ip }}"
retries: 1
delay: 5
async: 40
poll: 0
# until: asyncApiResult.status == 200 <- does not seem to exist
# until: asyncApiResult is succeeded <- not working because timeout is also a success
until: (lookup('file', asyncApiResult.results_file) | from_json).get('status') == '200'
У кого-нибудь есть идеи, как заставить это работать?