Ansible 合并多个任务以减少输出

Ansible 合并多个任务以减少输出,ansible,Ansible,我们试图在多种操作系统风格上执行剧本时获得较少的输出。但无法找到解决方案,因此张贴在这里以获得更好的答案 当我们执行多个任务时,是否可以合并为一个任务。我们正在将输出收集到一个文件中&然后将使用不同的标记进行相同的处理 - name: verify hostname block: - name: read hostname [PRE] shell: hostname register: hostname - name: set fact [hostna

我们试图在多种操作系统风格上执行剧本时获得较少的输出。但无法找到解决方案,因此张贴在这里以获得更好的答案

当我们执行多个任务时,是否可以合并为一个任务。我们正在将输出收集到一个文件中&然后将使用不同的标记进行相同的处理

- name: verify hostname
  block:
    - name: read hostname [PRE]
      shell: hostname
      register: hostname
    - name: set fact [hostname]
      set_fact:
        results_pre: "{{ results_pre | combine({'hostname': hostname.stdout.replace(\"'\", '\"')|quote }) }}"
    - name: write hostname
      copy:
        dest: "{{ remote_logs_path }}/{{ ansible_ssh_host }}/pre/hostname"
        content: "{{ hostname.stdout }}"
  tags:
    - pre
电流输出

TASK [role : read hostname [PRE]] ***************************************************************************
changed: [ip]

TASK [role : set fact [hostname]] ***************************************************************************
ok: [ip]

TASK [role : write hostname] ********************************************************************************
changed: [ip]
所需输出

TASK [role : Hostname Collected] ********************************************************************************
    changed: [ip]

通常,解析Ansible输出是个坏主意。您可能会收到一些运行时警告或意外的附加行

如果你真的想坚持Ansible输出,有一个所谓的
回调插件
,如果你想的话,你可以尝试实现你自己的

如果您需要Ansible playbook中的一些报告,常见的模式是有一个单独的任务,该任务将报告到一个文件中(通常在控制器主机上,使用
delegate:localhost


最后,如果你想检查幂等性,Molecular提供了这个特性。

你知道ansible提供了现成的事实吗?您只需要收集事实,这是默认设置。@Zeitounator:上面只是主机名的一个示例,但我正在尝试合并许多其他任务的输出。例如收集订阅状态、多路径状态等…您是否考虑了,或者?您的问题很不清楚。在您提供的三项任务中,有一项是无用的:
set fact[hostname]
,因为您最终从未使用过这个事实。所以,正如Zeitounator所指出的,删除它并使用可靠的事实,使它成为一项任务。我们如何分析哪项任务成功和失败的状态。如果我们不收集输出。您可以为playbook设置
any\u errors\u fatal:true
,在这种情况下,任何错误都会导致ansible playbook设置退出代码2。