运行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个节点.
编辑:最好的解决方案是在dubes的答案中,但如果必须将特定操作应用于主机列表,或者您无法使用 Ansible 2.4,则此解决方案为您提供了更多自由。
从 Ansible 2.2 开始,您可以使用ansible_play_hostsoransible_play_batch和sort它:
---
- hosts: "{{ ansible_play_hosts | sort() }}"
Run Code Online (Sandbox Code Playgroud)
来自ansible 文档:
ansible_play_hosts是当前播放中仍处于活动状态的所有主机的完整列表。
ansible_play_batch可用作当前播放“批次”范围内的主机名列表。批量大小由 定义serial,当未设置时,它相当于整个游戏(使其与 相同ansible_play_hosts)。
现在这是默认行为,ansible将按照文件中提到的顺序播放主机inventory。Ansible还提供了一些内置的方式来控制您order:
- hosts: all
order: sorted
gather_facts: False
tasks:
- debug:
var: inventory_hostname
Run Code Online (Sandbox Code Playgroud)
可能的值为order:
来源:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#hosts-and-users