【发布时间】:2016-06-08 22:56:53
【问题描述】:
我的问题可能不够完整。 这是我真正想要做的:
我有一个角色,其中包含有关这些密钥库的密钥库/密码的信息,而不是其他一些角色可能想要使用的。
目录结构如下:
/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 中,我将密钥库角色引用为依赖项:
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}}
知道我应该如何处理吗?
【问题讨论】:
-
你从哪里收到这个?在模板内?您确定要使用角色变量吗?您可能需要默认变量(defaults/main.yml)。这些变量稍后会进行评估,替换似乎效果更好。
-
我在模板中收到了这个。我调整了我的问题来解释我真正想要实现的目标。
-
在解析和模板化密钥库角色变量时,不会加载库变量。在这种情况下,您最终会得到两层不起作用的可变 jinja 模板。
-
我不明白为什么这个
keystore_2.password会起作用。你认为我应该如何解决我的问题?
标签: ansible