В настоящее время я пытаюсь работать над задачей, которая создаст каталоги для двух разных служб, но мне трудно решить, как я могу это сделать, используя доступные циклы.
Вот объект:
obj:
metadata:
uuid:
version:
services:
- server:
archive: binary.tar.gz
dirs:
bindir: /path/to/bindir/
confdir: /path/to/confdir/
tmpdir: /path/to/tmpdir/
- client:
archive: binary.tar.gz
dirs:
tmpdir: /path/to/tmpdir
И вот моя сопутствующая задача:
#Creating directories
- name: Creating directories for server and client mode.
file:
path: "{{ item.1.dirs['tmpdir'] }}"
state: directory
owner: "{{ item.0.metadata.uuid }}"
group: "{{ item.0.metadata.uuid }}"
mode: 0750
with_subelements:
- "{{ obj }}"
- services
Теперь меня немного беспокоит то, как циклы работают в анзибле, и я немного придерживаюсь моей текущей итерации, так что не могли бы вы помочь мне найти способ добиться того, что я пытаюсь сделать?
По вашим комментариям вы хотите создать каталоги для obj.services.#.dirs.tmpdir
предметы с деталями из obj.metadata
. Решение с width_items: "{{ object.services }}"
почти работает - но у вас нет доступа к obj.metadata
. Дело в том, что есть только один obj.metadata
вообще, поэтому вам не нужно ссылаться на него в цикле. Вы можете использовать его напрямую.
- name: Creating directories for server and client mode.
file:
path: "{{ item.dirs['tmpdir'] }}"
state: directory
owner: "{{ obj.metadata.uuid }}"
group: "{{ obj.metadata.uuid }}"
mode: 0750
with_items:
- "{{ obj.services }}"