求助:如何在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值,再分割成列表。
额外说明
- 确保
configFile变量在test.yml的上下文中已经被正确定义,否则lookup函数会找不到配置文件而报错。 - 如果你的场景必须使用
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
相关产品推荐
相关产品推荐

