2015-12-03 22 views
4

我通過Ansible在ec2服務器上運行滾動部署。我在同一時間使用serial參數,像這樣運行一些服務器上部署:可以使用Ansible「serial」參數指定區域嗎?

- name: run update 
    hosts: tag_app_servers:&tag_active_servers 
    serial: 7 
    sudo: True 
    pre_tasks: 
    - name: Gathering ec2 facts 
    action: ec2_facts 
    # do the deregistration here 
    roles: 
    - some_role 
    - some_other_role 
    post_tasks: 
    # re-register boxes here. 

事情是,Ansible認爲我所有的服務器都是一樣的(因爲它應該),並在服務器之間不區分不同的地區。所以,儘管我希望它從我所在的7個區域的每個區域取得一臺服務器,並且在這些區域並行運行更新,但Ansible可以從一個區域取出7臺服務器,並將其徹底癱瘓。這不是一個巨大的問題,因爲交通只是轉移到其他地區,但它遠非理想。在並行運行多個服務器更新時,強制它從不同地區獲取服務器的好方法是什麼?

回答

0

隨着Ansible 1.x中這根本是不可能的。在序列化劇本時,只需將服務器切成任意組。

隨着Ansible 2.x看起來strategies會做你想做的,但你可能不得不寫一個自定義策略插件來獲得你想要的特定行爲。

現在,隨着Ansible 1.x中,你可以只組你以這樣的方式,每個組都有每個地區一個服務器實例,然後在運行時對每個組一個劇本。這有點亂,但它會做你想做的。

相關問題