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

Функция «карта» в анзибле изменяет исходную последовательность списка

Мне нужно извлечь переменную из инвентаря:

[all]
1.1.1.1 site=A
2.2.2.2 site=B
3.3.3.3 site=C

Когда я использую:

sites: "{{ hostvars | map('extract',hostvars,'site') | list}}"

итоговый список:

["B", "A", "C"]

Обратите внимание, что последовательность изменилась.

Теперь, в этом конкретном случае, мне нужно будет сохранить исходную последовательность, поэтому результат должен быть независимым также от последовательности, в которой playbook проходит через хосты (!!):

["A", "B", "C"]

Любые идеи ?

Могу ли я заставить Ansible строго следовать порядку инвентаризации? И решит ли это проблему карты / извлечения?

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

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