bash - 如何使用临时命令从 bash 中读取 ansible 变量值?
问题描述
我想通过使用临时命令调用将 的值读ansible_distribution_major_version
入变量。bash
ansible
我得到的最接近的是下面的命令,但这仍然给我一些额外的输出,这些输出可能不太容易解析,甚至更糟,将来可能会改变。
ansible localhost -m setup -a "filter=ansible_distribution" -o
localhost | SUCCESS => {"ansible_facts": {"ansible_distribution": "MacOSX"}, "changed": false}
我怎样才能以一种干净整洁的方式做到这一点?
为了清楚起见,最后我想MacOSX
在 bash 变量中得到值。
解决方案
如果需要 ansible,那么我不知道有任何开箱即用的解决方案。可以查看回调插件(https://docs.ansible.com/ansible/devel/plugins/callback.html),也许开发一个完全符合您需要的插件( https://docs.ansible.com/ansible/2.6 /dev_guide/developing_plugins.html#callback-plugins)。
还可以将默认回调更改为现成的其他内容(即 json)并处理标准输出。可以在您的ansible.cfg
...
stdout_callback = json
bin_ansible_callbacks = True
...或使用环境变量:export ANSIBLE_LOAD_CALLBACK_PLUGINS=true
和export ANSIBLE_STDOUT_CALLBACK=json
.
然后用 ie python 处理 json (当然可能有比这更好的例子):
var=$(ansible localhost -m setup -a "filter=ansible_distribution_*" |python -c "import sys, json; print json.load(sys.stdin)['plays'][0]['tasks'][0]['hosts']['localhost']['ansible_facts']['ansible_distribution_major_version']") # var=18 (Ubuntu 18.04)
推荐阅读
- express - 如果使用 Express,是否需要 nginx
- google-apps-script - Google 脚本,使用 urlFetchApp() 进行 PUT 请求,当服务器发送 204 无内容响应时,我无法获得响应代码
- android - ViewPager2 通过混淆 FragmentStateAdapter 的两个实例导致崩溃
- string - 如何在飞镖中将字符串分成键/值对?
- android - 如何在一个命令行中在 ADB 上命令两个 android 设备 IP?
- apache-flink - 关于 Flink 中 State 的 TTL 配置
- google-forms - 如何在一次提交的谷歌表单中限制相同的答案?
- c# - 你能用自定义视图包围内容吗
- mysql - 为什么插入土耳其字母时出现 SQL 错误?
- java - 无法在索引 2 处绑定参数,因为索引超出范围。该语句有1个参数?