Как остановить непреодолимую задачу успешно, не провалившись?

Я искал примеры того, как остановить выполнение задачи Ansible, не нарушая ее.

Простой пример:

- name: check file
  stat: path={{some_path}}
  register: check_file_result

- name: if file exists, stop
  **fail**: msg="file exists, stopping"
  when: check_file_result.stat.exists

Это работает так, как в нем останавливается выполнение, но не удается с тонны красного ароматизированного текста, возможно, останавливая целую книгу от выполнения дальнейших задач. Есть ли способ остановить выполнение, как будто все закончилось "ОК"?

Примечание. Обходным путем является просто добавление "when: check_file_result.stat.exists == false", но это очень мало масштабируется.

Ответ 1

Если есть несколько задач, которые вы не хотите выполнять, когда check_file_result.stat.exists, я бы, вероятно, инкапсулировал все эти задачи в отдельный файл, а затем условно include этот файл, например

- name: check file
  stat: path={{ some_path }}
  register: check_file_result

- include: file_ops.yml
  when: check_file_result.stat.exists

Пример структуры каталогов:

|- roles/
  |- foo
    |- tasks
      |- main.yml
      |- file_ops.yml
    |- vars
      |- main.yml

Использование этого метода DRY: -)