2017-03-06 64 views
1

因此,我使用基於group_vars的playbook,用於爲各種網站提供IIS設置。Ansible:動態庫存中的Jinja引用

的group_vars包括2種主要類型的字典(含有http://stardict.sourceforge.net/Dictionaries.php下載的列表的類型的字典的複雜列表其中之一。)

複數一個參考了從firstdict中的Jinja2瓦爾(例如{{firstdic.sitename}} )

這與group_vars完美結合,引用由Ansible中的jinja2引擎解析。 但是,當涉及到一個動態庫存時,從第一個字典中引用變量時,整個字典是未設置的。

這裏談到的一些JSON(從我的動態庫存):

"firstdict": { "sitename": "mysitename" } 

"complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}} 

當使用這個JSON,調試模塊會發現沒有定義complexdict。

但是,jinja2部分正確解析並執行,因爲這將工作。

動態庫存輸入:

"complexdict": {"someotherdict": {"sitepath": "{{ \"foo\" }}"}} 

調試模塊返回:

"complexdict": { 
     "someotherdict": { 
      "sitepath": "foo" 
     } 
    } 

有一個變量的優先級問題?還有什麼我應該知道爲什麼它不能像這樣工作?

感謝您的幫助,Ansible大師:)

PS:我已經嘗試過逃跑經驗很多,逃避花括號,雙引號,等等。

回答

1

工作對我來說:

./inventory/test.sh:

#!/bin/bash 

cat << EndOfJSON 
{ 
    "test" : { 
    "hosts" : [ "localhost" ], 
    "vars" : { 
     "firstdict": { "sitename": "mysitename" }, 
     "complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}} 
     } 
    } 
} 
EndOfJSON 

./playbook.yml

--- 
- hosts: test 
    connection: local 
    gather_facts: no 
    tasks: 
    - debug: 
     var: complexdict 

輸出:

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "complexdict": { 
     "someotherdict": { 
      "sitepath": "mysitename" 
     } 
    } 
} 

如果這情況並非如此,請更新您的問題completeMCVE

+0

是的,你說得對。這工作完美。問題在於json中的一些轉義字符。 非常感謝您的幫助! – pschaeffer