Как я могу скрыть пропущенные задания, выводимые в Ansible

У меня есть Ansible роль, например

---
- name: Deploy app1
  include: deploy-app1.yml
  when: 'deploy_project == "{{app1}}"'

- name: Deploy app2
  include: deploy-app2.yml
  when: 'deploy_project == "{{app2}}"'

Но я развертываю только одно приложение в одном вызове роли. Когда я развертываю несколько приложений, я вызываю роль несколько раз. Но каждый раз есть много skipped tasks output (из задач, которые не проходят условие), чего я не хочу видеть. Как я могу избежать этого?

Ответ 1

Ansible позволяет вам управлять своим выходом с помощью пользовательского callbacks.

В этом случае вы можете просто использовать обратный вызов skippy, который ничего не выводит на пропущенную задачу.

Ответ 2

Я предполагаю, что вы не хотите видеть пропущенные задачи на выходе при запуске Ansible.

Установите значение false в файле ansible.cfg.

display_skipped_hosts = false

Примечание. Он все равно выдает имя задачи, хотя больше не будет отображаться "пропущено".

UPDATE: кстати, вы должны убедиться, что ansible.cfg находится в текущем рабочем каталоге.

Взято из файла ansible.cfg.

ansible будет читать ANSIBLE_CONFIG,  ansible.cfg в текущем рабочем каталоге,.ansible.cfg в  домашний каталог или /etc/ansible/ansible.cfg, в зависимости от того, что это  сначала находит.

Поэтому убедитесь, что вы устанавливаете display_skipped_hosts = false в файл справа ansible.cfg.

Сообщите мне, как вы идете

Ответ 3

Если вы не возражаете потерять цвета, вы можете преодолеть пропущенные задачи, пропустив вывод через sed:

ansible-playbook whatever.yml | sed -nr '/^TASK/{h;n;/^skipping:/{n;b};H;x};p'

Ответ 4

Если вы используете роли, вы можете использовать when для отмены include в main.yml

# roles/myrole/tasks/main.yml
- include: somefile.yml
  when: somevar is defined


# roles/myrole/tasks/somefile.yml
- name: this task will only run (and be seen in the output) if somevar is defined
  debug:
    msg: "Hello World"