问:“让任务只在第一个节点上运行。”
web_servers:
hosts:
1.2.3.4:
1.2.3.5:
A:Playbook的关键字order控制hosts的排序
引用Playbook Keywords
顺序:
控制用于执行播放的主机的排序。可能的值是inventory(默认)、sorted、reverse_sorted、reverse_inventory 和shuffle。
默认顺序为inventory,即play中的第一个host就是inventory中的第一个host。使用 run_once
引用Task Keywords:
run_once:将绕过主机循环的布尔值,强制任务尝试在第一个可用主机上执行,然后将任何结果和事实应用于同一批次中的所有活动主机。
例如,剧本
- hosts: webservers
tasks:
- debug:
msg: "Creates a backup cron on {{ inventory_hostname }}"
run_once: true
给予
msg: Creates a backup cron on 1.2.3.4
测试主机的顺序并查看其他选项。给定库存
shell> cat hosts
webservers:
hosts:
1.2.3.4:
1.2.3.5:
1.2.3.3:
剧本显示所选顺序的剧本中的第一个主机
- hosts: webservers
order: inventory
tasks:
- debug:
msg: "inventory: {{ inventory_hostname }}"
run_once: true
- hosts: webservers
order: reverse_inventory
tasks:
- debug:
msg: "reverse_inventory: {{ inventory_hostname }}"
run_once: true
- hosts: webservers
order: sorted
tasks:
- debug:
msg: "sorted: {{ inventory_hostname }}"
run_once: true
- hosts: webservers
order: reverse_sorted
tasks:
- debug:
msg: "reverse_sorted: {{ inventory_hostname }}"
run_once: true
- hosts: webservers
order: shuffle
tasks:
- debug:
msg: "shuffle: {{ inventory_hostname }}"
run_once: true
给予(删节)
msg: 'inventory: 1.2.3.4'
msg: 'reverse_inventory: 1.2.3.3'
msg: 'sorted: 1.2.3.3'
msg: 'reverse_sorted: 1.2.3.5'
msg: 'shuffle: 1.2.3.5'
问:“无论出于何种原因,它都不适合我。”
答:在这种情况下,将任务委托给组中的第一个主机。见Delegating tasks。例如
- debug:
msg: "Creates a backup cron on {{ inventory_hostname }}"
run_once: true
delegate_to: groups.webservers.0
给予
ok: [1.2.3.4 -> groups.webservers.0] =>
msg: Creates a backup cron on 1.2.3.4