ansible - 如何让 ansible playbook 执行只返回一个变量的值,仅此而已?
问题描述
我确实需要在 bash 脚本中加载一个 ansible 变量的值,并且我想运行一个只会打印该变量的 ansible 剧本,仅此而已。
这与https://docs.ansible.com/ansible/2.5/plugins/callback.html有关,但显然我无法发现任何可用于实现此目的的回调。
大多数情况null
下可以用来使ansible静音,但这并不能解决我的输出。
我知道我可以将变量值保存到临时文件中,但我试图在不创建中间文件的情况下做到这一点,我仍然有两个可以使用的流,stderr 和 stdout。
解决方案
我认为您在 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); ...'
推荐阅读
- java - for循环内while循环的时间复杂度
- javascript - 在 npm 的构建步骤中替换 URL
- python - 如何向 seaborn SNS 图添加链接/超链接?
- sql - 如何从特定表中同时选择 N 个用户(可能带有循环)?
- makefile - 如何告诉 makefile 文件尚未更新
- cmake - zsh + CMake:命令行选项不拆分
- postman - postman.setNextRequest() 执行所有请求
- c# - Coin Persist 脚本无法正常工作
- python - 为什么 CUDA GPU 矩阵乘法比 numpy 慢?numpy 怎么这么快?
- python - 导入文件夹中存在的所有 csv 文件并根据它们的名称对它们进行分组?