Ansible如何在play层级动态构建变量名引用嵌套变量值
Ansible play层级动态变量名实现方案
要实现基于inventory变量动态替换字典键名、生成动态变量引用,直接使用Ansible字典的方括号索引语法即可,不需要额外自定义插件或复杂逻辑。
配置修改方法
你只需要调整playbook中变量引用的写法,其余配置文件无需改动:
修改后的playbook.yaml:
--- - hosts: server1 gather_facts: true vars_files: - vars.yaml vars: # 原硬编码TEST替换为方括号包裹的动态变量,会自动解析inventory中的environment_value值作为键名 ansible_password: '{{ var1.name1[environment_value] }}' tasks: - debug: msg: '{{ ansible_password }}'
其余文件保持原有配置即可:
vars.yaml:
var1: name1: TEST: "prova"
server1主机变量:
environment_value: TEST
执行playbook后会正常输出prova,和硬编码写法效果完全一致。
扩展说明
- 方括号语法支持多层级动态键引用:如果路径上的多个键都是动态变量,可以连续使用方括号,比如
var1[dynamic_key1][dynamic_key2],Ansible会从左到右依次解析变量、匹配字典键。 - 如果需要拼接生成完整的动态变量名(而非字典下的动态键),可以使用Jinja2字符串拼接符
~搭配vars查找插件实现,示例:# 比如要动态引用名为db_config_TEST的变量,TEST来自environment_value dynamic_db_config: "{{ lookup('vars', 'db_config_' ~ environment_value) }}"
内容的提问来源于stack exchange,提问作者alexander moro
相关产品推荐
相关产品推荐

