Plugins 如何在Ansible中隐藏跳过的任务输出

Plugins 如何在Ansible中隐藏跳过的任务输出,plugins,output,ansible,Plugins,Output,Ansible,例如,我有一个负责任的角色 --- - name: Deploy app1 include: deploy-app1.yml when: 'deploy_project == "{{app1}}"' - name: Deploy app2 include: deploy-app2.yml when: 'deploy_project == "{{app2}}"' 但我在一次角色调用中只部署一个应用程序。当我部署多个应用程序时,我会多次调用角色。但每次都会有大量的跳过的任务输出(

例如,我有一个负责任的角色

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

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

但我在一次角色调用中只部署一个应用程序。当我部署多个应用程序时,我会多次调用角色。但每次都会有大量的
跳过的任务输出
(来自未通过条件的任务),这是我不想看到的。如何避免它?

Ansible允许您使用自定义命令控制其输出

在这种情况下,您可以简单地使用,它不会在跳过的任务上输出任何内容


也就是说,
skippy
现在已被弃用,将在ansible v2.11中删除。

我假设您不希望在运行ansible时在输出中看到跳过的任务

在ansible.cfg文件中将此设置为false

display_skipped_hosts = false
注意。它仍然会输出任务的名称,尽管不再显示“跳过”

更新:顺便说一下,您需要确保ansible.cfg位于当前工作目录中

取自ansible.cfg文件

ansible将读取ansible_配置, 当前工作目录中的.ansible.cfg 主目录或/etc/ansible/ansible.cfg,以其为准 先找到

因此,请确保在右侧ansible.cfg文件中设置了
display\u skipped\u hosts=false


让我知道你是怎么做的

如果你不介意掉色,你可以通过sed管道输出,省去跳过的任务:

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

如果您使用的是角色,则可以在时使用
取消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"

自ansible 2.4以来,添加了一个回调插件名称,以禁止跳过ansible输出中的任务名称和跳过关键字。您可以尝试以下ansible配置:

[defaults]
stdout_callback = full_skip


当我将插件复制到回调插件目录并再次运行playbook时,我并没有注意到任何更改。我在ansible.cfg文件()中找到display_skipped_hosts属性,但它仍然显示跳过的任务的名称。您是否将其命名为相同的名称?正如文档中提到的,它按字母顺序加载,
default
显然位于
skippy
之前,因此不会加载。@konstantin suvorov当我将stdout\u回调属性设置为skippy时,显示行为与将skippy复制到回调目录相同。Ansible仍然显示跳过任务的名称。@32cupo啊,对不起。我错过了你谈论跳过任务名称的事实。在做出任何决定之前,名字都会被打印出来,所以你不能简单地把它们去掉。这样做是因为您可能跳过了主机子集的任务。你唯一的选择是一个手工制作的插件。回调的正确链接是:注意:它已被弃用,将在我前面提到的答案的2.11中删除,我尝试了这个ansible.cfg属性,尽管它与skippy回调插件具有相同的效果。但是,谢谢您的回答。设置以下环境变量也会执行相同的操作:
export ANSIBLE\u DISPLAY\u SKIPPED\u HOSTS=false
您不应该仅为一个设置就将ANSIBLE.cfg放在当前工作目录中,因为这将覆盖所有设置,通常是一个非常意外的结果。Ansible不会合并您可能期望的几个Ansible.cfg文件中的设置。@32cupo您是对的。skippy插件已被弃用,而display_skipped_host设置是执行相同操作的新的官方方式。如何才能不为
Deploy app1
而为
Deploy app2
显示跳过的任务?我只想在一定数量的任务中跳过此显示。在下面的评论()中,我们与@konstantin suvorov讨论过,您不能跳过任务名称,因为它们是在做出任何决定之前打印出来的。这不会取消包含,而只是将给定时间添加到包含中的每个任务。请阅读关于静态/动态包含的内容。@KonstantinSuvorov你是对的,我错了。任务行仍然显示。当我想跳过整个文件时,这对我来说是一个节省行/时间的方法。你可以在
ansible.cfg
中使用
force\u color=1
强制着色。效果很好,但是当我使用
force\u color
时,我不得不使用修改过的sed-
sed-nr'/^TASK/{h;n;/^[\[0;36mskipping:/{n;b};h;x}p'
这是我想要的唯一答案:+1:从Ansible 2.11,改为设置
display\u skipped\u hosts=False
full\u skipp
插件现在已被弃用。这比
display\u skipped\u hosts=False
效果更好,因为它实际上完全跳过了输出。在Ansible 2.9.9.9中效果很好!谢谢!Ansible 2.9.13-这会抑制跳过的任务,但也会导致每个未跳过的任务行输出两次