AWX环境下Ansible按索引访问组内主机顺序异常问题咨询
问题原因说明
这是Ansible 2.9及更早版本的已知行为,既不是文档错误,也不是功能Bug,核心差异来源于inventory类型和版本排序逻辑:
- 官方文档中
webservers[0]的示例基于本地静态inventory场景,该场景下2.9版本的groups变量默认会保留ini文件中写入的主机顺序。而AWX同步Git源的inventory属于动态inventory范畴,2.9版本中动态inventory加载的主机列表默认按主机名的字母序排序,不会保留源文件中的写入顺序。你看到的AWX界面显示的顺序是UI单独做的适配,和Ansible执行时读取的groups变量顺序没有关联。 - Play级别的
order: inventory配置确实和groups变量的排序无关,该参数仅控制Ansible执行任务时的主机遍历顺序,不会修改groups全局变量的存储顺序。
解决方案
如果需要固定按inventory源文件的顺序获取主机,可以选择以下两种方案:
- 升级Ansible到2.10及以上版本,该版本调整了动态inventory的排序逻辑,默认会保留inventory源中的写入顺序,
groups变量返回的列表顺序和源文件一致。 - 若无法升级版本,可通过自定义排序规则实现:在inventory中给每个主机添加序号变量,再通过过滤器按变量排序,示例如下:
# inventory配置 [my_group] node1 order=1 node2 order=2# play中排序使用 - debug: msg: "按inventory顺序排列的主机:{{ groups['my_group'] | sort('attribute', 'order') }}"
内容的提问来源于stack exchange,提问作者onknows
相关产品推荐
相关产品推荐

