Похоже, словари в вашем списке sub-dir
поддельные.
Действительно, у вас есть как directory
ключ как для того, что кажется каталогом, так и для файла.
Ваша переменная будет более правильной:
sub_dir:
- { directory: "subdir/database/connection", file: "db_connection.xml" }
- { directory: "subdir/database/properties", file: "application.properties" }
- { directory: "subdir/application", file: "index.html" }
- { directory: "subdir/application/pom", file: "pom.xml" }
И с этим словарем ваши playbooks работают правильно, потому что file
больше не отменяет directory
.
Учитывая playbook:
- hosts: all
gather_facts: no
tasks:
- file:
path: "{{ item[0] }}/{{ item[1].directory }}"
state: directory
with_nested:
- "{{ main_dir }}"
- "{{ sub_dir }}"
vars:
main_dir:
- "/exec/db/dir1"
- "/exec/db/dir1/v1"
sub_dir:
- { directory: "subdir/database/connection", file: "db_connection.xml" }
- { directory: "subdir/database/properties", file: "application.properties" }
- { directory: "subdir/application", file: "index.html" }
- { directory: "subdir/application/pom", file: "pom.xml" }
Это дает резюме:
PLAY [all] ************************************************************************************************************************
TASK [file] ***********************************************************************************************************************
changed: [localhost] => (item=['/exec/db/dir1', {'directory': 'subdir/database/connection', 'file': 'db_connection.xml'}])
changed: [localhost] => (item=['/exec/db/dir1', {'directory': 'subdir/database/properties', 'file': 'application.properties'}])
changed: [localhost] => (item=['/exec/db/dir1', {'directory': 'subdir/application', 'file': 'index.html'}])
changed: [localhost] => (item=['/exec/db/dir1', {'directory': 'subdir/application/pom', 'file': 'pom.xml'}])
changed: [localhost] => (item=['/exec/db/dir1/v1', {'directory': 'subdir/database/connection', 'file': 'db_connection.xml'}])
changed: [localhost] => (item=['/exec/db/dir1/v1', {'directory': 'subdir/database/properties', 'file': 'application.properties'}])
changed: [localhost] => (item=['/exec/db/dir1/v1', {'directory': 'subdir/application', 'file': 'index.html'}])
changed: [localhost] => (item=['/exec/db/dir1/v1', {'directory': 'subdir/application/pom', 'file': 'pom.xml'}])
PLAY RECAP ************************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Что создает дерево каталогов:
tree /exec/db/dir1/
/exec/db/dir1/
├── subdir
│ ├── application
│ │ └── pom
│ └── database
│ ├── connection
│ └── properties
└── v1
└── subdir
├── application
│ └── pom
└── database
├── connection
└── properties
13 directories, 0 files