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

Kev*_*n C 6 ansible

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

TASK [setup] ********
ok: [node-p02]
ok: [node-p03]
ok: [node-p01]
Run Code Online (Sandbox Code Playgroud)

如何配置Ansible以确保其播放为:

TASK [setup] ********
ok: [node-p01]
ok: [node-p02]
ok: [node-p03]
Run Code Online (Sandbox Code Playgroud)

Serial: 1 不是一个选项,因为它减慢了游戏速度,我的剧本只适用于一个游戏中的3个节点.

sm4*_*rk0 6

编辑:最好的解决方案是在dubes答案中,但如果必须将特定操作应用于主机列表,或者您无法使用 Ansible 2.4,则此解决方案为您提供了更多自由。

从 Ansible 2.2 开始,您可以使用ansible_play_hostsoransible_play_batchsort它:

---
- hosts: "{{ ansible_play_hosts | sort() }}"
Run Code Online (Sandbox Code Playgroud)

来自ansible 文档

ansible_play_hosts 是当前播放中仍处于活动状态的所有主机的完整列表。

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


dub*_*bes 6

适用于Ansible 2.4及更高版本:

现在这是默认行为,ansible将按照文件中提到的顺序播放主机inventory。Ansible还提供了一些内置的方式来控制您order

- hosts: all
  order: sorted
  gather_facts: False
  tasks:
    - debug:
        var: inventory_hostname
Run Code Online (Sandbox Code Playgroud)

可能的值为order

  • 库存:默认值。订单是按库存提供的
  • reverse_inventory:顾名思义,这会反转库存“按提供的顺序”
  • 排序:主机按名称的字母顺序排序
  • reverse_sorted:主机按名称按相反的字母顺序排序
  • 随机播放:主机在每次运行时被随机排序

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

  • 不幸的是,我在我的库存文件中看到默认的随机订单,而不是“按提供的”。使用ansible 2.6.0,python 2.7.10。 (2认同)
  • 2022 年 6 月,`ansible-core 2.12.4`:注意,“库存订单”并不意味着“库存文件订单”。例如,“host_wars”中的内容**优先于库存文件顺序**!您可以使用“ansible-inventory -i inventory.yml --list”查看“真实”库存订单 (2认同)