ansible 中的“map”函数改变了列表的原始顺序

ansible 中的“map”函数改变了列表的原始顺序

我需要从库存中提取一个变量:

[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 中,或者至少在较旧的版本中,字典不是按插入顺序排序的。主机可能会按照您定义的顺序添加到主机变量中,或者可能会以某种随机顺序添加。

相关内容