如何确保AWX中Ansible组按inventory_hostname排序
解决AWX中Ansible组内主机顺序问题
问题背景
我有一个Ansible角色,其vars/main.yml文件内容如下:
my_upstream: | upstream diagnos { server {{ groups.calldiag.0 }}.{{ cd_domain }}:4290 fail_timeout=300; server {{ groups.calldiag.1 }}.{{ cd_domain }}:4290 fail_timeout=300; ip_hash; keepalive 100; }
使用该变量生成文件时,其余功能正常,但生成的内容顺序不符合预期:
server x-demo-02.example.com:4290 fail_timeout=300; server x-demo-01.example.com:4290 fail_timeout=300;
我需要调整为:
server x-demo-01.example.com:4290 fail_timeout=300; server x-demo-02.example.com:4290 fail_timeout=300;
注:未使用本地清单文件,而是在AWX中定义清单和组。
解决方案
方法1:手动调整AWX组内主机顺序
AWX中组内的主机顺序由添加/排列的顺序决定,直接在AWX界面修改即可:
- 进入AWX的清单页面,找到目标清单
- 点击进入
calldiag组的编辑界面 - 在主机列表中,将
x-demo-01拖拽到第一个位置,x-demo-02放在第二个位置 - 保存修改后,
groups.calldiag.0会自动对应x-demo-01,groups.calldiag.1对应x-demo-02
方法2:通过Ansible过滤器自动排序主机名
如果不想依赖手动维护顺序,可以利用Ansible的sort过滤器对组内主机按名称排序,修改vars/main.yml内容如下:
my_upstream: | upstream diagnos { {% for host in groups.calldiag | sort %} server {{ host }}.{{ cd_domain }}:4290 fail_timeout=300; {% endfor %} ip_hash; keepalive 100; }
这样无论AWX中原先的主机顺序如何,都会按主机名字典序排序,x-demo-01会自然排在x-demo-02之前。
方法3:自定义优先级标签排序
如果主机名没有规律,需要自定义排序规则,可以给AWX中的主机添加排序变量:
- 在AWX中分别编辑
x-demo-01和x-demo-02,添加主机变量:- 给
x-demo-01添加:sort_priority: 1 - 给
x-demo-02添加:sort_priority: 2
- 给
- 修改
vars/main.yml,按自定义变量排序:
my_upstream: | upstream diagnos { {% for host in groups.calldiag | sort(attribute='sort_priority') %} server {{ host }}.{{ cd_domain }}:4290 fail_timeout=300; {% endfor %} ip_hash; keepalive 100; }
这种方式适合复杂场景,能完全自定义主机排序逻辑。
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

