我需要从库存中提取一个变量:
[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"]
注意顺序已经改变。
现在,在这种特殊情况下,我需要保留原始序列,因此结果必须独立于剧本在主机中运行的序列(!!):
["A", "B", "C"]
有任何想法吗 ?
我可以强制 Ansible 严格遵循清单顺序吗?这也能解决映射/提取问题吗?
答案1
您不应该依赖清单中事物的定义顺序。无法保证这会保留在内存表示中。
是hostvars
一本字典。在 Python 中,或者至少在较旧的版本中,字典不是按插入顺序排序的。主机可能会按照您定义的顺序添加到主机变量中,或者可能会以某种随机顺序添加。