在使用Ansible时,我尝试使用存储的vars文件存储私有变量,然后在另一个vars文件中使用相同的角色。 (来自' Vault Pseudo leaf encryption' here的想法。)
e.g。我有一个标准的vars文件,roles/myrole/vars/main.yml
:
---
my_variable: '{{ my_variable_vaulted }}'
然后加密一个roles/myrole/vars/vaulted_vars.yml
:
---
my_variable_vaulted: 'SECRET!'
但是当我运行剧本时,我总是得到错误!#34;错误!错误! ' my_variable_vaulted'未定义"'。
我在没有加密第二个文件的情况下尝试了它,以确保它不是加密问题,并且我得到了同样的错误。
答案 0 :(得分:2)
my_variable_vaulted
无法使用的原因是因为我没有包含变量文件。我假设某个角色vars/
目录中的所有文件都是自动获取的,但我认为只有vars/main.yml
的情况。
因此,为了使角色中的所有任务都可以使用拱形变量,在roles/myrole/tasks/main.yml
中我在所有任务之前添加了这个:
- include_vars: vars/vaulted_vars.yml
答案 1 :(得分:1)
这不是在ansibles中处理保险库的最佳方式。 vault documentation for ansible概述了更好的方法。因此,您可以像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.yml
获取development_vault.yml
或group_vars
,具体取决于哪个环境框所属。然后您可以像以前一样在角色/剧本中使用my_variable
,而不必担心从正确的位置获取它。