我的问题可能不够完整 . 这是我实际上要做的事情:
我有一个角色包含有关这些密钥库的密钥库/密码的信息,而不是其他一些角色可能想要使用的 .
目录结构如下所示:
/roles/
keystore/
tasks/
main.yml
vars/
main.yml
vault.yml
app1/
defaults/
main.yml
meta/
main.yml
templates/
app1.properties
tasks/
main.yml
在keystore / tasks.main.yml中,我有一个任务要包含来自Vault文件的变量:
- name: "Include vault variables"
include_vars: "vault.yml"
在keystore / 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 }}"
在keystore / vars / vault.yml中,我有(加密)这个:
vault:
keystore_1_password: password1
keystore_2_password: password2
在app1 / meta / main.yml中,我将keystore角色作为依赖项引用:
dependencies:
- { role: keystore }
在app1 / defaults / main.yml中,我在变量中有一个我想要使用的密钥库的名称,默认情况下,这个应用程序(我希望能够根据环境改变它):
keystore_to_use: keystore_2
在app1 / templates / app1.properties中,我希望能够获取指定密钥库的正确路径和密码 .
keystore.path= {{ vars[keystore_to_use].path }}
keystore.password= {{ vars[keystore_to_use].password }}
这对于路径工作正常但不是密码,我得到这个而不是密码:
{{ vault.keystore_2_password }}
- 原始问题:
我在ansible中以编程方式访问角色变量时遇到问题 . 这是我想要做的 .
我有一个包含这样的东西的vars / main.yml文件:
test_variable: "{{test1.var1}}"
test1:
var1: "{{finalVariable}}"
finalVariable: finally
在我的模板中,我想使用类似 vars['test_variable']
的东西,我期待收到 finally
. 相反,我收到 {{test1.var}}
知道我应该怎么处理这个吗?
1 回答
订单很重要 . 在您的第一行
test1.var1
尚未定义 . 再次定义var1
时,尚未定义finalVariable
. 颠倒顺序,这应该工作 .但我同意@ Petro026 's comment. It looks like you'试图重载变量,在这种情况下只需在
defaults/main.yml
中定义默认值 . 如果's not what you'试图做,那么可能值得更多地解释一下你的目标 .