Ansible 在列表/表中打印主机名/变量

Ansible 在列表/表中打印主机名/变量

有没有办法使用 Ansible 打印出简单的表格样式输出。我已经将需要的值注册到剧本中的一个变量中,我只是想更干净地打印出来。目前,我使用 stdout.lines 的输出如下所示:

ok: [sage] => {
    "voutput.stdout_lines": [
        "4.4.5"
    ]
}

ok: [example] => {
    "voutput.stdout_lines": [
        "4.7"
    ]
}

但如果我能将它的格式改得更像这样就更好了:

sage              4.7
example           4.4.5
somethingelse     1.2.3

有没有办法直接在 Ansible 中做这些事情,或者我只需要获取它给出的输出并使用 AWK 之类的东西对其进行转换?

答案1

您可以使用标准 json 输出回调并获取所需数据杰奇

主办方:

[test]
srv1 testvar=abc
srv2 testvar=zzzzzz
srv3 testvar=qqqq

剧本.yml:

- hosts: test
  gather_facts: no
  tasks:
    - debug: var=testvar

执行:

$ ANSIBLE_STDOUT_CALLBACK=json ansible-playbook playbook.yml | jq -r '.plays[0].tasks[0].hosts | to_entries[] | "\(.key), \(.value.testvar)"'
srv1, abc
srv2, zzzzzz
srv3, qqqq

答案2

你可以:

  • 使用以下方法修改 Ansible 的日志输出回调插件。这将需要一些 Python 编码。不幸的是,示例插件似乎满足你的要求。

  • 使用 Jinja2 模板并将输出保存到文件中,templatecopy带参数的模块content

    首先,您需要将字典组合成一个列表,并迭代模板中的各个项目。

相关内容