Ansible Vault和使用include_vars加密的变量

Ansible Vault和使用include_vars加密的变量,ansible,ansible-vault,Ansible,Ansible Vault,我需要使用ansible vault存储并加密一个密码文件,我已创建了一个名为“passs”的加密文件,该文件在解密后存储在group_vars中,内容如下: --- testvar: password 我已创建剧本文件: --- - hosts: [machines] vars: include_vars: file: group_vars/passes roles: - role: someroletodeployafilewiththispas

我需要使用ansible vault存储并加密一个密码文件,我已创建了一个名为“passs”的加密文件,该文件在解密后存储在group_vars中,内容如下:

---
testvar: password
我已创建剧本文件:

---
- hosts: [machines]

  vars:
    include_vars: 
      file: group_vars/passes


  roles: 

  - role: someroletodeployafilewiththispass
该角色仅部署一个带有pass from模板的文件,该模板为:

using vaulted var {{ testvar }}
每次使用tower启动时,我都会收到错误消息

“msg”:“AnsibleUndefinedVariable:'testvar'未定义”

知道我做错了什么吗?没有迹象表明ansible正在解密我的加密文件。我刚刚粘贴的加密文件:

$ANSIBLE_VAULT;1.1;AES256
303965366239313330646366313238...

也许加密的文件应该看起来不同,这样Ansible将解密它?

解释

在代码中,您已经创建了一个名为
include\u vars
的变量,一个带有键
文件
和字符串值
group\u vars/passes
的字典


解决方案

在剧本中定义vars_文件的正确语法是
vars_文件
declaration:

---
- hosts: [machines]
  vars_files:
    - group_vars/passes
  roles: 
    - someroletodeployafilewiththispass

您可以使用
include_vars
,但它是一个操作模块,应该在
任务
下声明,或者在您的情况下(因为您希望它在角色之前执行)在
预任务
中声明:

---
- hosts: [machines]
  pre_tasks:
    - include_vars: 
        file: group_vars/passes
  roles: 
    - someroletodeployafilewiththispass