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



我想通过使用临时命令调用ansibleansible_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=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)

相关内容

  • 没有找到相关文章

最新更新