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

如何从Ansible Inventory提取变量并通过extra-vars传递?

从Ansible清单提取组变量并通过extra-vars传递的问题解决

问题原因

你当前的写法无效,是因为--extra-vars参数中的Jinja2表达式{{hostvars[ENV]['my_var_1']}}不会被Ansible解析,命令行直接将其作为字面量字符串传递给Playbook,而非解析后的变量值。

解决方案

可以通过以下两种方式在脚本中先获取清单里的变量值,再传递给Playbook:

方法1:利用ansible debug模块+grep提取值

修改myscript.sh内容如下:

ENVIR="${1}"

# 从清单中提取目标组的my_var_1值
MY_VAR=$(ansible ${ENVIR} -i inventory/my_inv.yml -m debug -a "var=my_var_1" | grep -oP '(?<=my_var_1: ).*')

# 传递变量执行Playbook
ansible-playbook -i inventory/my_inv.yml --extra-vars "ENV=$ENVIR MY_VAR=$MY_VAR"

原理:用ansible命令指定目标组,通过debug模块输出变量值,再用grep匹配提取出变量的具体内容。

方法2:利用ansible json输出+jq提取值(更可靠)

如果系统安装了jq工具,推荐这种方式,避免grep解析出错:

ENVIR="${1}"

# 以json格式输出变量并提取值
MY_VAR=$(ansible ${ENVIR} -i inventory/my_inv.yml -m debug -a "var=my_var_1" -o | jq -r '.my_var_1')

# 传递变量执行Playbook
ansible-playbook -i inventory/my_inv.yml --extra-vars "ENV=$ENVIR MY_VAR=$MY_VAR"

原理:通过-o参数让ansible输出单行json格式结果,再用jq精准提取变量值,适合复杂输出场景。

内容的提问来源于stack exchange,提问作者fr0zt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:25:22