在环境中的所有主机上运行playbook,但限制每个环境子组的一个主机执行

时间:2017-09-27 08:32:04

标签: ansible

所有!

我的测试环境中有下一个库存:

[module1_group]
module1-1.host.name
module1-2.host.name
module1-3.host.name
module1-4.host.name

[module2_group]
module2-1.host.name
module2-2.host.name

[module3_group]
module3-1.host.name
module3-2.host.name

[production:children]
module1_group
module2_group
module3_group

我需要在生产组中的所有主机上并行运行我的升级playbook,但同时如果两个主机属于同一模块组,则应逐个升级。例如,当我运行“ansible-playbook production upgrade-all.yml”时,它应该运行(例如)module1-1.host.name,module2-3.host.name,module3-2.host.name的升级但不是同时在module1-1.host.name和module1-4.host.name上。换句话说 - 生产子组中只有一个主机应该在一个时刻升级。模块组中的许多模块组和主机数是随机的。它有可能吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Ansible Patterns来实现这一目标:

for ((i=0; i<4; i++)) ; do
  ansible-playbook site.yml --limit "module1_group[$i],module2_group[$i],module3_group[$i]"
done

或者也许:

for ((i=0; i<4; i++)) ; do
  ansible-playbook site.yml --limit "module*-$i.host.name"
done

您还应该查看Ansible Rolling Update Batch Size