首页 文章

在第二个var文件中使用一个Ansible var文件中的变量

提问于
浏览
1

在使用Ansible时,我'm trying to use a vaulted vars file to store private variables, and then using those in another vars file, in the same role. (The idea from ' Vault伪叶加密'here . )

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

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

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

---
my_variable_vaulted: 'SECRET!'

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

我试过没有加密第二个文件,以确保它不是加密的问题,我得到相同的错误 .

2 回答

  • 1

    my_variable_vaulted wasn 't available was because I hadn' t包含变量文件的原因 . 我自动选择了'd assumed that all files in a role' s vars/ 目录,但我认为这只是 vars/main.yml 的情况 .

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

    - include_vars: vars/vaulted_vars.yml
    
  • 2

    这不是在ansibles中处理保险库的最佳方式 . 在vault documentation for ansible中概述了更好的方法 . 所以你会在_2658276中为环境创建你的基本变量:

    my_variable: {{ vault_my_variable }}
    

    然后在您的 inventories/main 中,您决定哪些主机应加载哪个保险库文件以满足此变量 . 例如,你可以在你的_2658279中拥有它:

    [production:children]
    myhost1
    
    [development:children]
    myhost2
    
    [production_vault:children]
    production
    
    [development_vault:children]
    development
    

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

相关问题