【问题标题】:Ansible output formatting optionsAnsible 输出格式选项
【发布时间】:2015-02-17 15:21:29
【问题描述】:

是否有使用 ansible(不是任何其他脚本)格式化 ansible 输出的选项?比如

name: Show version
  sudo: true
  hosts: web_front_end
  tasks:
    - name: Create yum cache
      shell: yum makecache
    - name: Check the version of Portal
      shell: rpm -qa | grep portal
      register: portal
    - debug: msg={{portal.stdout}}
  tags:
    - portal
    - wfe

我只想得到

TASK: [debug msg={{portal.stdout}}]

部分。甚至有没有办法只获取shell命令输出?

【问题讨论】:

  • 我现在已经非常了解 Ansible,但从未见过任何可以帮助您的功能。
  • 您可以通过管道传输 Ansible 的输出并使用 perl/sed/awk/任何可以执行此操作的 bash 工具对其进行处理……这种方法有问题吗?用这种方式把它弄出来真的很容易。
  • 我知道编写一个 python/ruby/perl/sed/awk/whatever 工具来做到这一点没有问题,但我想做一个 Jenkins 工作并避免涉及任何其他脚本
  • 我看不出这是 Jenkins 的问题,它可以执行 bash?如果您必须通过 ansible host1 playbook.yml 调用 Ansible,您不妨将其输出到 perl:ansible host1 playbook.yml | perl -ne 'do_perl_magic_that_prints_only_what_you_want'
  • 寻找相同的,我有很大的输出,因为\r\n 部分,我无法真正阅读。

标签: bash output ansible ansible-playbook


【解决方案1】:

我有一个插件来格式化输出。要点是here,但要点是:

# Save as <folder with your playbook>/callback_plugins/<some name>.py
# Optionally use no_log: True on your playbook/roles/tasks to suppress other output

import sys
import pprint

class CallbackModule(CallbackBase):

    def log(self, host, category, data):
        pp = pprint.PrettyPrinter(indent=2, stream=sys.stdout)
        pp.pprint(data)

【讨论】:

    【解决方案2】:

    你基本上有两个选择。一种是按照上面描述的方式进行操作,即将 ansible 命令的输出通过管道传输到 perl、sed、awk 等。

    第二种选择是编写自己的 Python 脚本,直接调用 ansible。 Ansible 是用 Python 编写的,因此您可以直接从自己的 Python 代码中调用它。 Python API 上的 Ansible 文档提供了有关如何执行此操作的详细信息。

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      相关资源
      最近更新 更多