Объединить Ansible async с повторными попытками - PullRequest
0 голосов
/ 11 октября 2019

Хорошо, теперь у меня действительно сложный случай с Ansible. Мне нужно выполнить мою задачу асинхронно с повторными попытками (то есть с циклом до) и затем выполнить задачу, если превышено время ожидания. Таким образом, оба моих параметра должны контролировать мою игру: количество повторных попыток (воспроизведение завершается неудачно, если превышено количество повторных попыток) и время ожидания (неудачное воспроизведение, если превышено время ожидания).

Я могу реализовать каждую стратегию отдельно:

- name: My shell task with retries
  shell: set -o pipefail && ./myscript.sh 2>&1 | tee -a "{{mylogfile}}"
  args:
    chdir: "{{myscript_dir}}/"
    executable: /bin/bash
  register: my_job
  until: my_job is succeeded
  retries: "{{test_retries}}"
  delay: 0

или async:

- name: My async shell task
  shell: set -o pipefail && ./myscript.sh 2>&1 | tee -a "{{mylogfile}}"
  args:
    chdir: "{{myscript_dir}}/"
    executable: /bin/bash
  register: my_job
  async: "{{test_timeout}}"
  poll: 0

- name: Tracking for async shell task
  wait_for:
    path: "{{mylogfile}}"
    search_regex: '^.*Done in \S+'
    timeout: "{{test_timeout}}"
  ignore_errors: yes
  register: result

Второе задание анализирует предыдущий журнал заданий, пока задание не будет завершено, то есть ищет строку «Выполнено за x секунд». Может быть, это не лучшая практика, и я должен использовать async_status, но не могу найти, как установить тайм-аут с ним (у него есть только повторные попытки для проверки статуса задания, что довольно глупо для меня).

Ооочень .. Могу ли я комбинировать обе стратегии, чтобы контролировать свою задачу и с счетом повторов, и с тайм-аутом?

UPD: я попытался запустить оба модуля until и async для shell, и, к удивлению, моя игра не провалиласьно повторные попытки не работают. Задача была запущена как задание «запусти и забудь» и выполнялась только один раз без повторных попыток. Так что это не вариант.

- name: My shell task with retries and async
  shell: set -o pipefail && ./myscript.sh 2>&1 | tee -a "{{mylogfile}}"
  args:
    chdir: "{{myscript_dir}}/"
    executable: /bin/bash
  register: my_job
  until: my_job is succeeded
  retries: "{{test_retries}}"
  delay: 0
  async: "{{test_timeout}}"
  poll: 0

- name: My async shell task
  wait_for:
    path: "{{mylogfile}}"
    search_regex: '^.*Done in \S+'
    timeout: "{{test_timeout}}"
  ignore_errors: yes
  register: result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...