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

时间:2017-02-28 10:57:11

标签: 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不是一个选项,因为它会减慢播放速度,而且我的剧本只适用于一个剧中的3个节点。

3 个答案:

答案 0 :(得分:5)

适用于Ansible 2.4及更高版本:

这是默认行为,ansible将按inventory文件中提到的顺序播放主机。 Ansible还提供了一些内置的方法,您可以使用order控制它:

- hosts: all
  order: sorted
  gather_facts: False
  tasks:
    - debug:
        var: inventory_hostname

order的可能值为:

  • 库存:默认。订单是“按库存提供的”
  • reverse_inventory:顾名思义,这将颠倒广告资源“按提供的顺序”
  • 已排序:主机按名称的字母顺序
  • reverse_sorted:主机按名称以相反的字母顺序排序
  • 随机播放:主机在每次运行时都是随机排序的

来源:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#hosts-and-users

答案 1 :(得分:2)

修改最佳解决方案位于dubes'answer,但如果必须将特定操作应用于主机列表,或者您不能使用Ansible 2.4。

自Ansible 2.2起,您可以使用ansible_play_hostsansible_play_batchsort

---
- hosts: "{{ ansible_play_hosts | sort() }}"

来自ansible doc

  

ansible_play_hosts是当前播放中仍然有效的所有主机的完整列表。

     

ansible_play_batch可用作当前“批量”游戏范围内的主机名列表。批量大小由serial定义,未设置时相当于整个游戏(使其与ansible_play_hosts相同)。

答案 2 :(得分:1)

不要使用组名,而是在列表中设置节点。

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