【问题标题】:Ansible - Access role variable of variable programmaticallyAnsible - 以编程方式访问变量的角色变量
【发布时间】: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


【解决方案1】:

订单很重要。在您的第一行中,test1.var1 尚未定义。当您再次定义var1 时,finalVariable 尚未定义。颠倒顺序,应该可以工作。

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

【讨论】:

  • 我调整了我的问题来解释我真正想要实现的目标。
猜你喜欢
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2010-09-08
  • 2020-06-01
  • 1970-01-01
相关资源
最近更新 更多