2017-09-27 8 views
1

all!在環境中的所有主機上運行playbook,但限制每個環境子主體組的一個主機執行playbook

我有一次清單在我的測試ENV:

[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 

我需要在所有並行生產組的主機上運行我升級的劇本,但在同一時間,如果兩個主機屬於相同的模塊組,他們應該逐一升級。例如,當我運行「ansible-playbook production upgrade-all.yml」時,它應該在(for ex)module1-1.host.name,module2-3.host.name,module3-2.host.name上運行升級,但不能運行同時在module1-1.host.name和module1-4.host.name上。換句話說 - 生產子組中只有一臺主機應該在一段時間內升級。模塊組中的許多模塊組和主機數是隨機的。它有可能嗎?

+0

恐怕你在這裏運氣不好。看看類似的問題:https://stackoverflow.com/questions/44651877/running-a-playbook-on-multiple-host-groups-one-at-a-time/44670007#44670007 –

回答

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

相關問題