在第二个 var 文件中使用来自一个 Ansible var 文件的变量
Using a variable from one Ansible var file in a second var file
在使用 Ansible 时,我尝试使用拱形 vars 文件来存储私有变量,然后在另一个 vars 文件中以相同的角色使用这些变量。 (想法来自'Vault Pseudo leaf encryption'here。)
例如我有一个标准的 vars 文件,roles/myrole/vars/main.yml
:
---
my_variable: '{{ my_variable_vaulted }}'
然后是加密的,roles/myrole/vars/vaulted_vars.yml
:
---
my_variable_vaulted: 'SECRET!'
但是当我 运行 剧本时,我总是得到“"ERROR! ERROR! 'my_variable_vaulted' is undefined"”。
我在不加密第二个文件的情况下进行了尝试,以确保这不是加密问题,但我遇到了同样的错误。
这不是在 ansibles 中处理 vault 的最佳方式。 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 会自动从 group_vars
中分别获取 production_vault.yml
或 development_vault.yml
,具体取决于哪个环境框属于。然后您可以像以前一样在 roles/playbooks 中使用 my_variable
,而不必担心从正确的位置获取它。
my_variable_vaulted
不可用的原因是因为我没有包含变量文件。我假设角色的 vars/
目录中的所有文件都是自动提取的,但我认为只有 vars/main.yml
.
才是这种情况
因此,为了使角色内的所有任务都可以使用 vaulted 变量,在 roles/myrole/tasks/main.yml
中,我在所有任务之前添加了这个:
- include_vars: vars/vaulted_vars.yml
在使用 Ansible 时,我尝试使用拱形 vars 文件来存储私有变量,然后在另一个 vars 文件中以相同的角色使用这些变量。 (想法来自'Vault Pseudo leaf encryption'here。)
例如我有一个标准的 vars 文件,roles/myrole/vars/main.yml
:
---
my_variable: '{{ my_variable_vaulted }}'
然后是加密的,roles/myrole/vars/vaulted_vars.yml
:
---
my_variable_vaulted: 'SECRET!'
但是当我 运行 剧本时,我总是得到“"ERROR! ERROR! 'my_variable_vaulted' is undefined"”。
我在不加密第二个文件的情况下进行了尝试,以确保这不是加密问题,但我遇到了同样的错误。
这不是在 ansibles 中处理 vault 的最佳方式。 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 会自动从 group_vars
中分别获取 production_vault.yml
或 development_vault.yml
,具体取决于哪个环境框属于。然后您可以像以前一样在 roles/playbooks 中使用 my_variable
,而不必担心从正确的位置获取它。
my_variable_vaulted
不可用的原因是因为我没有包含变量文件。我假设角色的 vars/
目录中的所有文件都是自动提取的,但我认为只有 vars/main.yml
.
因此,为了使角色内的所有任务都可以使用 vaulted 变量,在 roles/myrole/tasks/main.yml
中,我在所有任务之前添加了这个:
- include_vars: vars/vaulted_vars.yml