4

在使用 Ansible 时,我尝试使用一个拱形的 vars 文件来存储私有变量,然后在另一个 vars 文件中以相同的角色使用这些变量。(来自'Vault Pseudo Leaf encryption'的想法在这里。)

例如,我有一个标准的 vars 文件roles/myrole/vars/main.yml

---
my_variable: '{{ my_variable_vaulted }}'

然后是一个加密的,roles/myrole/vars/vaulted_vars.yml

---
my_variable_vaulted: 'SECRET!'

但是当我运行剧本时,我总是得到“错误!错误!'my_variable_vaulted'未定义”'。

我已经尝试过没有加密第二个文件,以确保它不是加密问题,并且我得到了同样的错误。

4

2 回答 2

4

不可用的原因my_variable_vaulted是因为我没有包含变量文件。我假设角色vars/目录中的所有文件都是自动拾取的,但我认为只有vars/main.yml.

因此,为了使角色中的所有任务都可以使用拱形变量,roles/myrole/tasks/main.yml我在所有任务之前添加了这个:

- include_vars: vars/vaulted_vars.yml
于 2016-02-18T21:45:13.763 回答
3

这不是在 ansibles 中处理 vault 的最佳方式。ansible 的 Vault 文档中概述了更好的方法。因此,您可以像这样为环境创建基本变量group_vars/all.yml

my_variable: {{ vault_my_variable }}

然后在inventories/main你决定哪些主机应该加载哪个保险库文件来满足这个变量。例如,你可以在你的inventories/main

[production:children]
myhost1

[development:children]
myhost2

[production_vault:children]
production

[development_vault:children]
development

然后 ansible 将根据属于哪个环境框自动获取production_vault.ymldevelopment_vault.yml分别从中获取。group_vars然后你可以my_variable像以前一样在你的角色/剧本中使用,而不必担心从正确的地方获取它。

于 2016-02-18T18:33:31.480 回答