Ansible-按照我想要的顺序与主持人一起玩

Ansible-按照我想要的顺序与主持人一起玩,ansible,Ansible,运行playbook时,Ansible会随机将节点设置为第一个、第二个和第三个 TASK [setup] ******** ok: [node-p02] ok: [node-p03] ok: [node-p01] 如何配置Ansible以确保它以排序的顺序与主机一起执行?例如: TASK [setup] ******** ok: [node-p01] ok: [node-p02] ok: [node-p03] Serial:1不是一个选项,因为它会减慢播放速度,而且我的playbook在一次

运行playbook时,Ansible会随机将节点设置为第一个、第二个和第三个

TASK [setup] ********
ok: [node-p02]
ok: [node-p03]
ok: [node-p01]
如何配置Ansible以确保它以排序的顺序与主机一起执行?例如:

TASK [setup] ********
ok: [node-p01]
ok: [node-p02]
ok: [node-p03]

Serial:1
不是一个选项,因为它会减慢播放速度,而且我的playbook在一次播放中可用于3个节点。

我认为另一种可能性是将
主机中的确切主机名作为列表,而不是组。然而,其他答案更符合Ansible方法

 ---    
 - hosts:
     - node-p01
     - node-p02
     - node-p03

编辑:最好的解决方案是在“主机列表”中,但如果必须对主机列表应用特定的操作,或者您不能使用Ansible 2.4,则此解决方案可以为您提供更多的自由度

由于Ansible 2.2,您可以使用
Ansible\u play\u主机
Ansible\u play\u批处理
排序

---
- hosts: "{{ ansible_play_hosts | sort() }}"
发件人:

ansible\u play\u hosts
是当前播放中仍处于活动状态的所有主机的完整列表

ansible\u play\u batch
作为主机名列表提供,这些主机名在当前播放“批次”的范围内。批量大小由
serial
定义,未设置时相当于整个播放(使其与
ansible\u play\u hosts
相同)

适用于Ansible 2.4及更高版本: 这是现在的默认行为,ansible将按照
清单
文件中提到的顺序播放主机。Ansible还提供了一些内置方法,您可以使用
顺序来控制它:

- hosts: all
  order: sorted
  gather_facts: False
  tasks:
    - debug:
        var: inventory_hostname
顺序的可能值为:

  • 库存:默认值。订单由库存“提供”
  • 反向库存:顾名思义,这将反向库存提供的订单
  • 排序:主机按名称的字母顺序排序
  • 反向排序:主机按名称按逆字母顺序排序
  • 洗牌:主机在每次运行时随机排序

来源:

有什么特别的原因让你必须按顺序运行节点吗?当然没有真正的原因,但如果你愿意,你可以编写自己的标准输出插件,它将收集主机的任务结果,并立即按顺序打印。也许另一种执行策略可以帮助你:playbook strategies似乎无法解决这个问题。我的playbook在节点上创建主/从/从配置。设置主节点是因为它位于第一位。在我的情况下,它将是节点p02。但我希望它是node-p01。不幸的是,我在我的库存文件中默认看到一个随机订单,而不是“提供的”。使用ansible 2.6.0、python 2.7.10.0,有趣的是,根据文档,它仍然应该默认为库存,这可能是因为您的回购协议中有其他模块/配置将其搞乱了吗?