Ansible: интеграция по древовидной структуре - PullRequest
1 голос
/ 13 апреля 2020

Я хочу перебирать древовидную структуру.

Как перебирать только уровни 1 и 2? (Я хочу видеть корреляцию, как показано ниже, между именем и уровнем 0)

Может быть, структура ошибочна? (json | Список диктовок или других?)

---
- name: test
  hosts: localhost
  gather_facts: no
  vars:
   directories:
    - name: DIR1
      level0:
       - name: SUBDIR1
         level1:
           - name: SUBDIR11
             level2:
              - name: SUBDIR111
              - name: SUBDIR112
           - name: SUBDIR12
             level2:
              - name: SUBDIR121
              - name: SUBDIR122
       - name: SUBDIR2
       - name: SUBDIR3
    - name: DIR2
      level0:
       - name: SUBDIR1
       - name: SUBDIR2
       - name: SUBDIR3

  tasks:
  - name: Debug level0
    debug:
      msg: "DIR {{item.0.name}} Subdir {{item.1.name}}"
    loop: "{{ directories | subelements('level0') }}"

1 Ответ

0 голосов
/ 13 апреля 2020

Есть четыре вложенных списка. Для этого нужны 2 вложенных цикла, оба с подэлементами. Например, с включенной задачей из файла loop-item.yml

shell> cat loop-item.yml
- debug:
    msg: "{{ outer_item.0.name }} {{ outer_item.1.name }} {{ item.0.name }} {{ item.1.name }}"
  loop: "{{ outer_item.1.level1|default([])|subelements('level2') }}"

задача

  - include_tasks: loop-item.yml
    loop: "{{ directories|subelements('level0') }}"
    loop_control:
      loop_var: outer_item

дает декомпозицию вложенных списков

    "msg": "DIR1 SUBDIR1 SUBDIR11 SUBDIR111"
    "msg": "DIR1 SUBDIR1 SUBDIR11 SUBDIR112"
    "msg": "DIR1 SUBDIR1 SUBDIR12 SUBDIR121"
    "msg": "DIR1 SUBDIR1 SUBDIR12 SUBDIR122"

Q: "Может быть, структура неправильная? (json | список диктовок или другой?)"

A: Структура в порядке. Можно итерировать только списки. В любом случае любая другая структура должна быть преобразована в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...