我有一个以下格式的变量文件:
files:
name: file1
size: 50K
location:
- /var/tmp
- /nfsvol
- /tmp
users:
- user1
- user2
- user3
我希望使用词典和列表的某些循环以以下方式生成任务文件,并且可以将其传递给playbook:
- name: Build File Repo
file_repo:
name: file1
size: 50K
location:
- user1
- user2
- user3
users:
- /var/tmp
- /nfs_vol
- /tmp
var文件可以包含许多"文件"块,我希望任务文件使用任务文件中指定的循环浏览整个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
我尝试使用子元素,也遵循以下线程,但它不符合我的目的;带有列表的嵌套环和字典
不可能
使用任务中指定的循环浏览整个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') }}"