2017-01-24 64 views
0

我有一種情況,我們有3層框,在每一層我們應用不同的變量設置(如緩存目錄),但有一堆默認值。我還需要在每個節點的基礎上覆蓋,這通常通過主機本身的庫存變量完成。我不確定什麼是組織主機的最佳方式,以便對我有利的precedence worksAnsible:使用嵌套組與變種

以下是我嘗試過的不同的東西。在每一種情況下,我在清單文件中像這樣的條目:

[bots-fancy] 
fancy-1 

[bots-super-fancy] 
super-1 

[bots-magical] 
magic-1 
magic-2 provider=aws 

起初,我有他們每個變量定義的長字符串。我也有不同的group_var/bots/[bots-magical | bots-super-fancy | bots-fancy].yaml文件。這很快就變得站不住腳了。


嘗試1:劇本變量 在劇本我有這樣的事情:

--- 
hosts: 
    - bots 
vars_files: 
    - "group_vars/bots/defaults.yml" 
    - "group_vars/bots/{{ groups_names[0] }}.yml" 
roles: 
    - somethign 

這個工作(雖然是易碎的),但它不會讓我重寫在每臺主機的基礎。我不得不偶爾在節點上設置不同的事物,但不是在整個組中。


嘗試2:使用group_vars每個

我加入

[bots:children] 
bots-fancy 
bots-super-fancy 
bots-magical 

到主機文件。從手冊中刪除任何vars_files,併爲每個組創建group_vars。我將默認/共享設置添加到group_vars/bots.yaml。當我運行該劇本時,它似乎只會加載bots group_vars。理想情況下,我希望它加載bots,然後用bots-fancy覆蓋它。然後最後來自主機文件的值。

我不確定構建這些組的最佳方式,所以任何輸入都會非常有幫助!

回答

4

不知道你的問題是什麼。您應該罰款:

主機:

[bots-a] 
bot1 

[bots-b] 
bot2 

[bots:children] 
bots-a 
bots-b 

迪爾斯:

./group_vars/bots.yml 
./group_vars/bots-a.yml 
./group_vars/bots-b.yml 

有一羣深度的Ansible概念(至少在最近的版本)。在這個例子中,用於主機bot2組變量將按照以下順序來填充:

深度0:組allall.yml(這裏缺失,忽略)
深度1:組botsbots.yml
深度2:組 ,bots-b.yml

您可以在源代碼中看到詳細信息和處理順序here

因此,如果您在bots.yml中定義了默認值並在bots-b.yml中定義了特定值,那麼您應該達到您的預期。