簡體   English   中英

Ansible集團的優先權

[英]Ansible group vars priority

假設我在group_vars中有3個文件:

abc.yml
all.yml
xyz.yml

並且在它們中定義了相同的變量:

- my_var: abc
- my_var: all
- my_var: xyz

Ansible 文檔說:

在任何部分中,重新定義var將覆蓋先前的實例。 如果多個組具有相同的變量,則加載的最后一個組獲勝。 如果你在play的vars:section中定義了兩次變量,那么第二個獲勝。

這是否意味着加載順序是按字母順序排列的, abc.yml具有最低優先級,而xyz.yml最高,或者它取決於hosts中組的順序?

什么是裝貨單?


有趣的是,改變hosts中組的順序也會改變結果,但是以不可預測的方式。

我嘗試運行ansible-playbook my_var.yml -c local (只返回變量值)以及以下所有組合:

[all]
localhost

[xyz]
localhost

[abc]
localhost

但我仍然無法弄清楚它是如何工作的。

ansible文檔現在非常清楚這種行為......

https://docs.ansible.com/ansible/2.6/user_guide/intro_inventory.html#how-variables-are-merged

當合並相同父/子級別的組時,它將按字母順序完成,並且加載的最后一個組將覆蓋先前的組。 例如,a_group將與b_group合並,b_group變量匹配將覆蓋a_group中的變量。

從Ansible 2.4版開始,用戶可以使用組變量ansible_group_priority來更改相同級別的組的合並順序(在解析父/子順序之后)。 數字越大,合並越晚,優先級越高。 如果未設置,此變量默認為1。 例如:

 a_group: testvar: a ansible_group_priority: 10 b_group testvar: b 

在這個例子中,如果兩個組具有相同的優先級,結果通常是testvar == b,但由於我們給a_group一個更高的優先級,結果將是testvar == a。

我會說Ansible在這種情況下的行為是未指定的。

看起來來自Ansible git存儲庫的以下問題可能已經解決了您描述的行為: 來自庫存的Ansible group_vars不支持重復的主機

查看相關提交的代碼更改 ,看起來現在組應按深度排序,然后按名稱(按字母順序)排序。

值得注意的是,這種行為可能會根據您運行的Ansible版本而有所不同,因為這些更改僅合並到Ansible存儲庫的stable-2.2分支中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM