如何在Ansible playbook中为同一主机组的不同主机分配不同顺序值
你现有写法的问题在于:with_sequence会让每台主机独立执行完整的1~3循环,set_fact每次执行都会覆盖变量值,因此所有主机最后都会保留循环最后一次的赋值3,不符合预期。
以下是两种可实现需求的方案:
方案1:动态计算顺序值(无需修改 inventory)
直接通过Ansible内置变量获取当前主机在组内的下标,计算得到顺序值:
- hosts: my_host serial: 1 tasks: - name: 分配顺序值 set_fact: sequential_var: "{{ groups['my_host'].index(inventory_hostname) + 1 }}" # 后续5个任务可以直接使用sequential_var变量
说明:groups['my_host']是my_host组下所有主机的列表,顺序和inventory中定义的一致;inventory_hostname是当前执行任务的主机名,index()方法获取主机在列表中的下标(从0开始计数),加1后即可得到1、2、3的对应顺序值。
方案2:inventory预定义变量(顺序更稳定)
如果担心inventory主机排序变动导致顺序值变化,可以直接在inventory中给每个主机单独定义变量:
INI格式inventory示例:
[my_host] A sequential_var=1 B sequential_var=2 C sequential_var=3
该方案无需额外编写set_fact任务,所有任务中可以直接调用sequential_var变量,优先级更高、稳定性更强。
内容的提问来源于stack exchange,提问作者asking
相关产品推荐
相关产品推荐

