Ansible实现嵌套列表与字符串的统一循环遍历问题
Ansible嵌套列表遍历解决方案
当前你遇到的问题是:loop中将test_var作为单个元素加入循环,导致整个列表被一次性输出,而非逐个遍历其中的对象。要在同一个任务里实现嵌套列表的扁平化遍历,有两种简洁的解决方式:
方式一:使用flatten过滤器扁平化列表
直接在loop中通过flatten过滤器将嵌套的列表展开,确保所有元素处于同一层级:
- hosts: localhost connection: local gather_facts: false vars: test_var: - name: "ben" - name: "ben_test" tasks: - name: test print shell: "echo {{ item }}" loop: "{{ ['ben_str', 'ben_second_str'] + test_var | flatten(levels=1) }}"
flatten(levels=1)参数指定只展开一层嵌套,避免意外处理更深层级的结构,适合你的场景。
方式二:使用loop_control的flatten参数(Ansible 2.10+)
在任务中添加loop_control配置,开启自动扁平化功能,无需修改loop的元素组合:
- hosts: localhost connection: local gather_facts: false vars: test_var: - name: "ben" - name: "ben_test" tasks: - name: test print shell: "echo {{ item }}" loop: - "ben_str" - "ben_second_str" - "{{ test_var }}" loop_control: flatten: yes
以上两种方式都会让任务逐个遍历所有元素:先处理字符串ben_str、ben_second_str,再依次处理test_var中的两个name对象,每个元素都会被单独传入shell模块执行。
内容的提问来源于stack exchange,提问作者ben shalev
相关产品推荐
相关产品推荐

