Ansible URI не работает с до и асинхронно - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь выполнить вызов 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'

У кого-нибудь есть идеи, как заставить это работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...