运行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个节点。
答案 0 :(得分:5)
这是默认行为,ansible将按inventory
文件中提到的顺序播放主机。 Ansible还提供了一些内置的方法,您可以使用order
控制它:
- hosts: all
order: sorted
gather_facts: False
tasks:
- debug:
var: inventory_hostname
order
的可能值为:
来源: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_hosts
或ansible_play_batch
和sort
:
---
- 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