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

Ansible Playbook变量转义问题:动态获取主机组主机数失败

问题:Ansible中通过变量引用主机组并统计主机数量报错

我想在total_hosts: "{{ groups['site'] | length }}"里像第一行- hosts: '{{ site }}'那样,用已定义的site变量加载对应的主机组,但使用变量时出现如下错误:

{"msg": "The task includes an option with an undefined variable. The error was: {{ groups['{{vars[site]}}'] | length }}: 'dict object' has no attribute '{{vars[site]}}'."

对应的Playbook代码:

---
- hosts: '{{ site }}'
  gather_facts: false
  vars:
    total_hosts: "{{ groups['{{vars[site]}}'] | length }}"
  tasks:
    - name: Test Connection
      ansible.windows.win_ping:
    - name: Total Hosts
      debug:
        msg: "{{ total_hosts }}"

解决方案

问题出在嵌套的Jinja2模板语法,在Ansible变量的{{ }}内部不需要再嵌套模板标记。直接修改total_hosts的定义即可:

---
- hosts: '{{ site }}'
  gather_facts: false
  vars:
    total_hosts: "{{ groups[site] | length }}"
  tasks:
    - name: Test Connection
      ansible.windows.win_ping:
    - name: Total Hosts
      debug:
        msg: "{{ total_hosts }}"

原因说明

当你在{{ }}中编写表达式时,直接使用变量名site即可,Ansible会自动解析它的值作为主机组名称去groups字典中查找。原写法里的groups['{{vars[site]}}']是错误的嵌套,会让Ansible把{{vars[site]}}当成字面量的键去查找,而不是解析变量值,所以才会提示找不到对应的组属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:05:56