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

如何在Ansible中访问包含点号的顶层变量?

问题原因与解决方法

错误根源

你的变量名(如ubuntu_20.04_codenames)包含点号,Ansible使用的Jinja2模板引擎会将点号解析为「对象属性访问」。比如ubuntu_20.04_codenames会被错误解读为:先取整数20对应的变量ubuntu_20,再尝试访问它的04_codenames属性,这显然不符合语法规则,因此抛出expected token 'end of statement block', got 'integer'错误。

解决方法

方法1:重命名变量(推荐)

把变量名中的点号替换为下划线,彻底避免Jinja2的解析歧义:
修改inventory中的变量定义:

all:
  vars:
    ubuntu_18_04_codenames:
      - 'bionic'
      - 'tara'
      - 'tessa'
      - 'tina'
      - 'tricia'
    ubuntu_20_04_codenames:
      - 'focal'
      - 'ulyana'
      - 'ulyssa'
      - 'uma'
      - 'una'
    ubuntu_22_04_codenames: 
      - 'jammy'
      - 'vera'
      - 'vanessa'
      - 'Victoria'

任务中的when条件同步修改:

- name: "Adding Docker 20.04 APT repository"
  apt_repository:
    repo: deb https://download.docker.com/linux/ubuntu focal stable
  when: ansible_lsb.codename in ubuntu_20_04_codenames

方法2:保留原变量名,用字典方式引用

如果不想修改变量名,可通过vars字典直接按字符串键名访问变量,绕过Jinja2的属性解析逻辑:

- name: "Adding Docker 20.04 APT repository"
  apt_repository:
    repo: deb https://download.docker.com/linux/ubuntu focal stable
  when: ansible_lsb.codename in vars['ubuntu_20.04_codenames']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:06:25