我想通过使用即席命令调用ansible_distribution_major_version
将bash
的值读入ansible
变量中。
我得到的最接近的命令是下面的命令,但这仍然使我获得了一些额外的输出,这些输出可能很难解析甚至更糟,将来可能会更改。
ansible localhost -m setup -a "filter=ansible_distribution" -o
localhost | SUCCESS => {"ansible_facts": {"ansible_distribution": "MacOSX"}, "changed": false}
我该如何以一种简洁的方式做到这一点?
请明确一点,最后我想在bash变量中添加MacOSX
值。
答案 0 :(得分:0)
如果需要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)