首页 > 解决方案 > 如何使用临时命令从 bash 中读取 ansible 变量值?

问题描述

我想通过使用临时命令调用将 的值读ansible_distribution_major_version入变量。bashansible

我得到的最接近的是下面的命令,但这仍然给我一些额外的输出,这些输出可能不太容易解析,甚至更糟,将来可能会改变。

ansible localhost -m setup -a "filter=ansible_distribution" -o
localhost | SUCCESS => {"ansible_facts": {"ansible_distribution": "MacOSX"}, "changed": false}

我怎样才能以一种干净整洁的方式做到这一点?

为了清楚起见,最后我想MacOSX在 bash 变量中得到值。

标签: bashansible

解决方案


如果需要 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=trueexport 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)

推荐阅读