Сортировать вложенный ansible словарь по ключу - PullRequest
0 голосов
/ 27 апреля 2020

У нас есть задача ansible, подобная этой

- name: Migrate Zookeeper settings
  zoo_import:
    version: "{{ item[0] }}"
    content: "{{ item[1] }}"
  with_items: "{{ zk_import | dictsort }}"

Модуль zoo_import ожидает стрельбу версия и dict содержимое , и я угадайте dictsort создает список кортежей.

Так как мне передать элемент списка в модуль? Наиболее очевидный вариант содержимого: {{dict (item [1])}} заканчивается на «элемент последовательности обновления словаря # 0 имеет длину 1; требуется 2»

Спасибо.

PS Если важно, словарь zk_import перед сортировкой имеет вид

zk_import:
  v20200420:
    to_update:
      '/path1/key1/': 'value2'
      '/path2/key1/': 'other value'
    to_delete:
      '/path/key/': 'value2'
      '/path/key1/subkey': 'other value'
  v20200425:
      etc...

1 Ответ

2 голосов
/ 28 апреля 2020

В Ansible> = 2,5 вы должны использовать loop вместо with_items:

loop: "{{ zk_import | dictsort }}"

В Ansible <= 2,4 вам необходимо использовать: </p>

with_items:
  - "{{ zk_import | dictsort }}"

Это специальное поведение with_items, которое задокументировано :

Обратите внимание, что with_items выравнивает первую глубину предоставленного списка и может дать неожиданные результаты, если вы передаете список, который состоит из списков. Вы можете обойти это, обернув вложенный список в список:

# This will run debug once with the three items
- debug:
    msg: "{{ item }}"   vars:
    nested_list:
      - - one
        - two
        - three   with_items:
    - "{{ nested_list }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...