Мне нужно извлечь переменную из инвентаря:
[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 в том порядке, в котором вы их определяете, или могут быть в произвольном порядке.