如何在Ansible临时命令中使用when子句,过滤已定义变量的主机输出?
问题
我想查看清单(inventory)里所有定义了Ansible主机变量xsp_server的主机,以及对应的变量值。现在用的命令是这样的:
ansible all -i inventory/production -o -m debug \ -a msg="{% if (xsp_server is defined) %}{{ xsp_server }}{% else %}'notdefined'{% endif %}" \ | grep -v notdefined
我不想用grep过滤,去掉后执行简化命令:
ansible all -i inventory/production -o -m debug \ -a msg="{% if (xsp_server is defined) %}{{ xsp_server }}{% endif %}"
结果会出现一大堆空输出:
SUCCESS => { "changed": false, "msg": ""}
请问怎么用when子句实现只显示定义了xsp_server变量的主机输出?
解决方案
直接在ad-hoc命令里用-w(或--when)参数指定执行条件,这样只有变量存在的主机才会执行debug模块:
ansible all -i inventory/production -o -m debug \ -a "msg={{ xsp_server }}" \ -w "xsp_server is defined"
解释
-w选项用来给ad-hoc命令添加执行条件,这里xsp_server is defined的意思是:只有当该主机上确实定义了xsp_server变量时,才运行debug模块输出变量值。- 这样执行后,没有定义该变量的主机不会返回任何输出,完全避免了空结果的问题,直接得到你需要的主机和对应的
xsp_server值。
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

