Ansible-以编程方式访问变量的角色变量

Ansible-以编程方式访问变量的角色变量,ansible,Ansible,我的问题可能不够完整。 以下是我实际想做的: 我有一个角色,其中包含有关这些密钥库的密钥库/密码的信息,而不是其他角色可能希望使用的信息 目录结构如下所示: /roles/ keystore/ tasks/ main.yml vars/ main.yml vault.yml app1/ defaults/ main.yml

我的问题可能不够完整。 以下是我实际想做的:

我有一个角色,其中包含有关这些密钥库的密钥库/密码的信息,而不是其他角色可能希望使用的信息

目录结构如下所示:

/roles/
    keystore/
        tasks/
            main.yml
        vars/
            main.yml
            vault.yml
    app1/
        defaults/
            main.yml
        meta/
            main.yml
        templates/
            app1.properties
        tasks/
            main.yml
test_variable: "{{test1.var1}}"
test1:
  var1: "{{finalVariable}}"
finalVariable: finally
在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中,我(加密)了以下内容:

在app1/meta/main.yml中,我将密钥库角色作为依赖项引用:

dependencies:
  - { role: keystore }
在app1/defaults/main.yml中,我在一个变量中有一个密钥库的名称,默认情况下,我想用于此应用程序(我希望能够根据环境进行更改):

在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文件,其中包含如下内容:

/roles/
    keystore/
        tasks/
            main.yml
        vars/
            main.yml
            vault.yml
    app1/
        defaults/
            main.yml
        meta/
            main.yml
        templates/
            app1.properties
        tasks/
            main.yml
test_variable: "{{test1.var1}}"
test1:
  var1: "{{finalVariable}}"
finalVariable: finally
在我的模板中,我希望使用类似于
vars['test_variable']
的东西,我希望最终收到
。
相反,我收到的是
{{test1.var}


你知道我该怎么处理吗?

订单很重要。在第一行中,
test1.var1
尚未定义。当您定义
var1
时,仍然没有定义
finalVariable
。颠倒顺序,这样应该行得通


但我同意@Petro026的评论。看起来您试图重载变量,在这种情况下,只需在
defaults/main.yml
中定义默认值即可。如果这不是你想要做的,也许值得再多解释一下你的目标。

你从哪里收到的?在模板中?您确定要使用角色变量吗?您可能需要使用默认变量(defaults/main.yml)。这些变量会在以后进行评估,替换似乎效果更好。我修改了我的问题来解释我实际想要实现的目标。当解析和模板化密钥库角色变量时,不会加载vault变量。在这种情况下,您最终会得到两层变量jinja模板,但这不起作用。我不明白为什么这个
keystore\u 2.password
会起作用。你认为我应该如何解决我的问题?我调整了我的问题来解释我真正想要达到的目标。