如何使用adhoc命令从bash读取ansible变量值?

时间:2018-10-03 08:47:13

标签: bash ansible

我想通过使用即席命令调用ansible_distribution_major_versionbash的值读入ansible变量中。

我得到的最接近的命令是下面的命令,但这仍然使我获得了一些额外的输出,这些输出可能很难解析甚至更糟,将来可能会更改。

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

我该如何以一种简洁的方式做到这一点?

请明确一点,最后我想在bash变量中添加MacOSX值。

1 个答案:

答案 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=trueexport 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)