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

时间:2016-02-25 22:25:59

标签: ansible

我的问题可能不够完整。 以下是我实际上要做的事情:

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

目录结构如下所示:

/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 个答案:

答案 0 :(得分:0)

订单很重要。在您的第一行test1.var1尚未定义。当您再次定义var1时,尚未定义finalVariable。颠倒顺序,这应该有效。

但我同意@ Petro026的评论。您似乎正在尝试重载变量,在这种情况下,只需在defaults/main.yml中定义默认值即可。如果那不是你想要做的事情,那么再多解释一下你的目标可能是值得的。