我有一个变量文件,格式如下:
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
答案 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') }}"