如何遍历Ansible中的嵌套项

时间:2019-06-13 16:02:22

标签: arrays loops ansible

我不确定我是否采用正确的方法,但是我有下一个问题。

我需要一个简单的任务,例如:

  - name: Copying files
    template:
      src: "{{ item[1] }}.j2"
      dest: "{{ path }}/{{ item[0] }}/{{ item[1] }}"
    with_nested:
      - [ 'env1' , 'env2' ]
      - [ 'file1' , 'file2']

实际结果:

/path/env1/file1
/path/env1/file2
/path/env2/file1
/path/env2/file2

预期结果:

/path/env1/file1
/path/env2/file2

我只需要file1在目录env1中生成模板,而file2在env2中生成模板。 我无法使用简单的“ with_items”来完成此操作,因为我要迭代2个项目,目录名称和文件名称。

我敢肯定有一种方法可以正确地做到这一点。

预先感谢

2 个答案:

答案 0 :(得分:0)

使用zip过滤器。下面的游戏

- hosts: localhost
  vars:
    list1: [ 'env1' , 'env2' ]
    list2: [ 'file1' , 'file2']
  tasks:
    - debug:
        msg: "/path/{{ item.0 }}/{{ item.1 }}"
      loop: "{{ list1|zip(list2)|list }}"

给予(grep msg):

    "msg": "/path/env1/file1"
    "msg": "/path/env2/file2"

答案 1 :(得分:0)

您可以尝试按照以下步骤获得预期结果:

  - name: Copying files
    template:
      src: "{{ item[1] }}.j2"
      dest: "{{ path }}/{{ item[0] }}/{{ item[1] }}"
    with_together:
      - [ 'env1' , 'env2' ]
      - [ 'file1' , 'file2']

with_together解释

相关问题