首页 > 解决方案 > 如何让 ansible playbook 执行只返回一个变量的值,仅此而已?

问题描述

我确实需要在 bash 脚本中加载一个 ansible 变量的值,并且我想运行一个只会打印该变量的 ansible 剧本,仅此而已。

这与https://docs.ansible.com/ansible/2.5/plugins/callback.html有关,但显然我无法发现任何可用于实现此目的的回调。

大多数情况null下可以用来使ansible静音,但这并不能解决我的输出。

我知道我可以将变量值保存到临时文件中,但我试图在不创建中间文件的情况下做到这一点,我仍然有两个可以使用的流,stderr 和 stdout。

标签: ansible

解决方案


我认为您在 stdout 回调中处于正确的位置,但您可能更喜欢编程结构化的回调之一,因此您可以执行您想要的确切任务并仅提取其输出:

env ANSIBLE_STDOUT_CALLBACK=json ansible-playbook the-playbook.yml | \
  jq -r '.plays[0].tasks[0].hosts.localhost.stdout'

我在这里使用它是jq因为它非常适合编写脚本,但是您当然也可以使用劣质的 python 来执行更复杂的任务发现逻辑,或者更好的错误处理或其他:

env ANSIBLE_STDOUT... | python -c 'import json, sys; o = json.load(sys.stdin); ...'

推荐阅读