我确实需要在bash脚本中加载一个ansible变量的值,并且我想运行一本ansible剧本,只打印该变量,而不会更多。
这与https://docs.ansible.com/ansible/2.5/plugins/callback.html有关,但显然我无法发现可用于实现该目标的任何回调。
大多数null
可以用来使ansible静音,但这不能解决我的输出。
我知道我可以将变量值保存到临时文件中,但是我试图在不创建中间文件的情况下执行此操作,我仍然可以使用两个流,即stderr和stdout。
答案 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); ...'