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

求助:如何在Ansible Playbook中循环vars里的section变量

解决Ansible Playbook循环导入并传递不同变量值的问题

你现在遇到的核心问题是重复定义同一个section变量时,Ansible会自动覆盖前面的值,只保留最后一个,所以test2.yml只会运行一次,用的是def这个section值。要让它针对三个不同的section各运行一次,我们需要用动态导入+循环的方式来实现——因为import_playbook是静态导入,不支持循环逻辑,而include_playbook支持动态循环。

具体解决方案

把你的test.yml修改成下面这样,用include_playbook配合loop遍历三个section值:

- include_playbook: "{{ lookup('ini', 'COMMON_SCRIPTS section=ANSIBLE file={{ configFile }}') }}/test2.yml"
  vars:
    section: "{{ item }}"
  loop:
    - "ABC"
    - "xyz"
    - "def"
  tags:
    - copy

为什么这样有效?

  • include_playbook是动态导入,支持loop参数,每次循环都会把当前的item值传递给test2.yml里的section变量。
  • 这样test2.yml会被执行三次,分别对应ABC、xyz、def三个section值,每次都会从你的配置文件里读取对应section下的TOMCATS值,再分割成列表。

额外说明

  1. 确保configFile变量在test.yml的上下文中已经被正确定义,否则lookup函数会找不到配置文件而报错。
  2. 如果你的场景必须使用import_playbook(比如需要静态解析的场景),那只能手动写三次import_playbook条目,每个条目传递不同的section值,但这种方式维护起来很麻烦,不推荐:
    - import_playbook: "{{ lookup('ini', 'COMMON_SCRIPTS section=ANSIBLE file={{ configFile }}') }}/test2.yml"
      vars:
        section: "ABC"
      tags:
        - copy
    - import_playbook: "{{ lookup('ini', 'COMMON_SCRIPTS section=ANSIBLE file={{ configFile }}') }}/test2.yml"
      vars:
        section: "xyz"
      tags:
        - copy
    - import_playbook: "{{ lookup('ini', 'COMMON_SCRIPTS section=ANSIBLE file={{ configFile }}') }}/test2.yml"
      vars:
        section: "def"
      tags:
        - copy
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:42:51