我想通过使用临时命令调用ansible
将ansible_distribution_major_version
的值读入bash
变量中。
我得到的最接近的是下面的命令,但这仍然为我提供了一些额外的输出,这些输出可能不太容易解析,甚至更糟,将来可能会发生变化。
ansible localhost -m setup -a "filter=ansible_distribution" -o
localhost | SUCCESS => {"ansible_facts": {"ansible_distribution": "MacOSX"}, "changed": false}
我怎样才能以一种漂亮和干净的方式做到这一点?
需要明确的是,最后我想在 bash 变量中得到MacOSX
值。
如果 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
。
然后用 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)