我正试图从Ansible剧本中创建一个目录结构。有人能提出解决这个问题的方法吗?
我的剧本看起来像这个
---
- name: Install DB2 on RHEL
hosts: dbserver
include_vars: main.yml
tasks:
- name: Make additinal directory structure
file:
state: directory
group: db2iadm1
owner: db2inst1
path: "{{ item.path }}"
with_items:
- { path: "/data1/DB2/tablespaces/{{ dbname }}" }
- { path: "/data2/DB2/tablespaces/{{ dbname }}" }
这是我的var文件
dbname: [db1, db2]
我期望以以下格式创建目录结构
/data1/DB2/tablespaces/db1
/data1/DB2/tablespaces/db2
/data2/DB2/tablespaces/db1
/data2/DB2/tablespaces/db2
但是上面的剧本不起作用
with_nested完成了这项工作。例如
- debug:
msg: mkdir {{ item.0 }}/{{ item.1 }}
with_nested:
- - /data1/DB2/tablespaces
- /data2/DB2/tablespaces
- - db1
- db2
给出
"msg": "mkdir /data1/DB2/tablespaces/db1"
"msg": "mkdir /data1/DB2/tablespaces/db2"
"msg": "mkdir /data2/DB2/tablespaces/db1"
"msg": "mkdir /data2/DB2/tablespaces/db2"
与变量中的数据相同的代码
- debug:
msg: mkdir {{ item.0 }}/{{ item.1 }}
with_nested:
- "{{ base_dirs }}"
- "{{ dbname }}"
vars:
base_dirs:
- /data1/DB2/tablespaces
- /data2/DB2/tablespaces
dbname: [db1, db2]
您正在寻找类似于join
中的product
过滤器的东西
- debug:
msg: mkdir {{ item }}
with_items: '{{ base_dirs | product(dbname) | map("join", "/") | list }}'
vars:
base_dirs:
- /data1/DB2/tablespaces
- /data2/DB2/tablespaces
dbname: [db1, db2]