2016-02-25 70 views
0

我的問題可能不夠完整。 這裏就是我真正想要做的事:Ansible - 以編程方式訪問變量的角色變量

我有一個包含有關這些密鑰庫比一些其他角色可能需要使用密鑰庫/密碼信息的作用。

的目錄結構如下所示:

/roles/ 
    keystore/ 
     tasks/ 
      main.yml 
     vars/ 
      main.yml 
      vault.yml 
    app1/ 
     defaults/ 
      main.yml 
     meta/ 
      main.yml 
     templates/ 
      app1.properties 
     tasks/ 
      main.yml 
在密鑰庫/ tasks.main.yml

,我有個任務,包括從庫文件中的增值經銷商:

- name: "Include vault variables" 
    include_vars: "vault.yml" 
在密鑰庫

/VARS/main.yml,我有這樣的:

keystore_1: 
    path: /path.to.the.keystore_1 
    password: "{{ vault.keystore_1_password }}" 
keystore_2: 
    path: /path.to.the.keystore_2 
    password: "{{ vault.keystore_2_password }}" 

在密鑰庫/乏/ vault.yml,我(加密)該:

vault: 
    keystore_1_password: password1 
    keystore_2_password: password2 

在APP1 /間/ main.yml,我參考作爲依賴密鑰庫作用:

dependencies: 
    - { role: keystore } 

在APP1 /默認/ main.yml,我有,在可變,名稱我想用,默認情況下,這個應用程序的密鑰存儲的(我希望能夠這取決於環境變化):

keystore_to_use: keystore_2 

在APP1 /模板/ app1.properties我希望能夠到獲取指定密鑰的正確路徑和密碼撕毀。

keystore.path= {{ vars[keystore_to_use].path }} 
keystore.password= {{ vars[keystore_to_use].password }} 

這工作正常的路徑,但不輸入密碼,我得到的代替密碼本:

{{ vault.keystore_2_password }} 

- 原題:

我無法訪問角色變量以可信的方式編程。 這是我想要做的。

我有一個包含一些像這樣的瓦爾/ main.yml文件:

test_variable: "{{test1.var1}}" 
test1: 
    var1: "{{finalVariable}}" 
finalVariable: finally 

在我的模板,我想使用類似vars['test_variable']和我期待收到finally。 取而代之,我收到{{test1.var}}

任何想法我應該如何處理?

+0

你從哪裏收到這條信息?在模板裏面? 您確定要使用角色變量嗎?您可能需要默認變量(defaults/main.yml)。這些變量在稍後評估,替代似乎更好。 – Petro026

+0

我在模板中收到此內容。我調整了我的問題來解釋我實際想要達到的目標。 – maximede

+0

當密鑰庫角色變量被分析和模板化時,不會加載庫變量。在這種情況下,最終會出現兩層不可用的可變jinja模板。 – Petro026

回答

0

訂單事宜。您的第一行test1.var1尚未定義。當您再次定義var1時,finalVariable尚未定義。顛倒順序,並應該工作。

但我同意@ Petro026的評論。它看起來像你試圖超載變量,在這種情況下,只需在defaults/main.yml中定義默認值即可。如果這不是你想要做的事情,可能值得再多解釋一下你的目標。

+0

我改編我的問題來解釋我實際上想要達到的目標。 – maximede