如何在Ansible中实现双层循环以遍历多个数组元素?
Ansible实现双层循环遍历多数组元素
你的问题出在:winamp数组里存的是字符串"foo"和"bar",不是实际的数组变量引用,所以循环只会输出这两个字符串,而非对应数组的元素。下面给两种可行的解决方法:
方法一:嵌套循环(保留数组来源区分)
如果需要明确元素来自哪个数组,或者要对不同数组做差异化处理,用嵌套循环:
- name: 双层循环遍历多数组元素 vars: foo: [foo0, foo1, foo2] # 替换成你的实际数组内容 bar: [bar0, bar1, bar2] target_arrays: - foo - bar debug: msg: "{{ inner_item }} (来自数组 {{ outer_item }})" loop: "{{ lookup('vars', outer_item) }}" loop_control: loop_var: inner_item with_items: "{{ target_arrays }}"
说明:
- 外层用
with_items遍历target_arrays里的数组名称(字符串) - 内层通过
lookup('vars', outer_item)获取对应名称的数组变量,再用loop遍历数组元素 loop_control: loop_var: inner_item是为了避免内层循环的item变量覆盖外层的item
方法二:合并数组后遍历(更简洁)
如果不需要区分元素来自哪个数组,直接把多个数组合并成一维数组再遍历,代码更简单:
- name: 合并多数组后遍历所有元素 vars: foo: [foo0, foo1, foo2] bar: [bar0, bar1, bar2] debug: msg: "{{ item }}" loop: "{{ foo + bar }}"
如果有多个数组(比如3个及以上),可以用flatten过滤器合并:
loop: "{{ [foo, bar, baz] | flatten }}"
内容的提问来源于stack exchange,提问作者Flissek
相关产品推荐
相关产品推荐

