Ansible报错'vars_t0'未定义:脚本生成变量后无法调用问题
解决Ansible变量未定义问题
问题根源
出现'vars_t0' is undefined报错,主要有三个原因:
- 变量名拼写错误:脚本生成的变量是
vars_t0,但剧本中误写为var_t0(少了末尾的s)。 - 脚本执行位置错误:
script模块默认在远程目标节点执行,你需要在本地控制节点生成变量文件,却未指定本地执行,导致文件生成在远程节点,控制节点无法读取。 - 动态生成的变量未加载:Ansible在执行任务前已加载角色vars目录的文件,后续生成的文件不会自动纳入变量范围,需手动加载。
修复步骤
1. 修正剧本内容
调整后的剧本如下,关键修改已标注:
- name: Running Script locally to generate vars file script: generate_var.sh 2 delegate_to: localhost # 强制在本地控制节点执行脚本 register: result - name: Load generated variables into playbook include_vars: file: ./vars/vars_t0.yml # 替换为脚本实际生成的文件路径,比如角色vars目录的绝对/相对路径 delegate_to: localhost # 从本地加载变量文件 - name: Modify Tier0 vmware.ansible_for_nsxt.nsxt_policy_tier0: hostname: "********" username: "admin" password: "********" validate_certs: False state: present display_name: "{{ item.t0_name }}" locale_services: - state: present edge_cluster_info: edge_cluster_display_name: "*******" preferred_edge_nodes_info: - edge_cluster_display_name: "********" edge_node_display_name: "*********" with_items: "{{ vars_t0 }}" # 修正变量名拼写,匹配脚本生成的变量名
2. 确认脚本生成路径
确保generate_var.sh脚本生成的变量文件路径与include_vars中指定的路径一致。例如,如果脚本在角色的tasks目录下,要生成到角色的vars目录,脚本中写入文件的路径应为../vars/vars_t0.yml。
3. 验证变量文件格式
确保脚本生成的YAML文件格式正确,你的示例内容是有效的:
vars_t0: - t0_name: T0_GW_01 - t0_name: T0_GW_02
内容的提问来源于stack exchange,提问作者Olivier
相关产品推荐
相关产品推荐

