Ansible-动态目录结构创建



我正试图从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]

最新更新