字典和列表的Ansible循环

时间:2019-03-19 19:20:40

标签: ansible

我有一个变量文件,格式如下:

files:
   name: file1
   size: 50K
   location:
     - /var/tmp
     - /nfsvol
     - /tmp
    users:
     - user1
     - user2
     - user3

我希望使用字典和列表上的某些循环以以下方式生成任务文件,并将其传递给剧本:

- name: Build File Repo
  file_repo:
     name: file1
     size: 50K
     location:
       - user1
       - user2
       - user3
     users:
       - /var/tmp
       - /nfs_vol
       - /tmp

var文件可以包含许多“文件”块,我希望任务文件使用任务文件中指定的循环遍历整个var文件,以便每个块都可以在指定的主机上执行。

各种文件可以是这样的:

files:
   name: file1
   size: 50K
   location:
     - /var/tmp
     - /nfsvol
     - /tmp
    users:
     - user1
     - user2
     - user3

files:
   name: file2
   size: 53K
   location:
     - /var/tmp
     - /nfsvol
   users:
     - user5
     - user21

我尝试使用sub元素,并且还遵循了以下线程,但它不符合我的目的; Nested loop with a list and a dictionary

1 个答案:

答案 0 :(得分:0)

不可能

  

使用任务中指定的循环遍历整个var文件

其中

  

var文件可以包含许多“文件”块

不可能有许多名为“文件”的变量。将所有“块”放入列表并循环:“ {{files}}”

files:
  - name: file1
    size: 50K
    location:
      - /var/tmp
      - /nfsvol
      - /tmp
    users:
      - user1
      - user2
      - user3
  - name: file2
    size: 53K
    location:
      - /var/tmp
      - /nfsvol
    users:
      - user5
      - user21

下面的任务可能就是您想要的。

tasks:
  - name: Touch files
    file:
      path: "{{ item.1 }}/{{ item.0.name }}"
      state: touch
    loop: "{{ lookup('subelements', files, 'location') }}"