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

Ansible报错'vars_t0'未定义:脚本生成变量后无法调用问题

解决Ansible变量未定义问题

问题根源

出现'vars_t0' is undefined报错,主要有三个原因:

  1. 变量名拼写错误:脚本生成的变量是vars_t0,但剧本中误写为var_t0(少了末尾的s)。
  2. 脚本执行位置错误:script模块默认在远程目标节点执行,你需要在本地控制节点生成变量文件,却未指定本地执行,导致文件生成在远程节点,控制节点无法读取。
  3. 动态生成的变量未加载: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:10:28