如何使ansible剧本执行仅返回一个变量的值而仅返回一个变量?

时间:2018-12-01 12:59:24

标签: ansible

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

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

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

我知道我可以将变量值保存到临时文件中,但是我试图在不创建中间文件的情况下执行此操作,我仍然可以使用两个流,即stderr和stdout。

1 个答案:

答案 0 :(得分:2)

我认为您使用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); ...'