2016-05-17 33 views
0

我想有一個初學者手冊,說go.yml - 在此,我希望能夠提示用戶他們想要執行哪些產品動作(例如proxy,lb等)。基於用戶輸入,我該如何讓劇本發起其他劇本?

有沒有一種方法可以查詢用戶的輸入,然後根據該輸入啓動劇本?基本上,我想類似如下:

- hosts: "prod" 
    sudo: yes 
    vars_prompt: 
    product: "What product do you want to deploy?" 
    if product == proxy: 
     - include proxy.yml 
    if product == lb: 
     - include lb.yml 
    ... 

我不是很舒服的劇本如何流動,以及他們如何從任務/文件的處理程序不同明顯。有這樣的可能嗎?我的目標是避免有十幾個不同的劇本文件可供選擇,而只是有一個始終可以使用的默認啓動類型劇本。

回答

1

劇本可以包含其他劇本。因此,您可以通過單個入口點劇本來觸發多個劇本。但在劇本級別上沒有條件。所有包含的劇本將被執行。

理論上你的角色條件將起作用。正確的語法是:

roles: 
    - role: proxy 
    when: product == "proxy" 
    - role: lb 
    when: product == "lb" 

但是,這是重新發明車輪。爲了限制應執行哪個角色,通常使用tags(和skip-tags)。

roles: 
    - role: proxy 
    tags: proxy 
    - role: lb 
    tags: lb 

然後,例如,給您打電話--tags "proxy"。這也適用於包括劇本。

在角色中使用vars_prompt和條件的缺點是,執行劇本時會得到大量跳過的任務。按標記過濾時,不匹配的角色/任務將不會顯示爲跳過狀態。