Как заставить Ansible игнорировать неудачную извлечение tarball?

У меня есть команда в незанятой пьесе:

- name: extract the tarball
  command: tar --ignore-command-error -xvkf release.tar

Ожидается, что некоторые файлы не будут извлечены, поскольку они уже существуют (флаг -k).

Однако это приводит к невозможности остановки общей пьесы, так как есть код ошибки из извлечения tar.

Как я могу обойти это? Как вы можете видеть, я пробовал --ignore-command-error безрезультатно.

Ответ 1

Вы хотите использовать аргумент ignore_errors:

- name: extract the tarball
  command: tar --ignore-command-error -xvkf release.tar
  ignore_errors: yes

См. "Игнорировать неудачные команды" на странице документации по обработке ошибок.

ignore_errors работает лучше всего, когда вы можете обнаружить успех в некотором роде - вы можете register выводить и проверять это, или вы можете использовать creates для поиска определенного имени файла.

Ответ 2

ignore_errors: yes по-прежнему вызывает ошибку, отображающую неудачную задачу в приглашении. Если вы хотите, чтобы эта задача терпела неудачу, вы можете установить failed_when: false или более сложное состояние, как описано в руководстве:

- name: this command prints FAILED when it fails
  command: /usr/bin/example-command -x -y -z
  register: command_result
  failed_when: "'FAILED' in command_result.stderr"

Итак, вы можете искать вывод stderr. Возможно, вы все еще хотите сбой, если файл не читается, не существует или что-то еще, но не прерывается, когда архив разбит и не может быть извлечен.