Назад | Перейти на главную страницу

Ansible перебирает списки и миксин массивов

В настоящее время я пытаюсь работать над задачей, которая создаст каталоги для двух разных служб, но мне трудно решить, как я могу это сделать, используя доступные циклы.

Вот объект:

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 }}"