You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:50:51