2

我需要使用 ansible Vault 存储和加密密码的文件,我创建了一个名为“passes”的加密文件,该文件存储在 group_vars 中,解密后包含以下内容:

---
testvar: password

我创建了剧本文件:

---
- hosts: [machines]

  vars:
    include_vars: 
      file: group_vars/passes


  roles: 

  - role: someroletodeployafilewiththispass

该角色只是使用模板传递的文件部署一个文件,该文件是:

using vaulted var {{ testvar }}

每次我使用 tower 启动它时,我都会收到错误消息

"msg": "AnsibleUndefinedVariable: 'testvar' 未定义"

任何想法我做错了什么?没有迹象表明我的加密文件正在被 ansible 解密。还有我刚刚粘贴的加密文件:

$ANSIBLE_VAULT;1.1;AES256
303965366239313330646366313238...

也许加密的文件应该看起来不同,所以 Ansible 会解密它?

4

1 回答 1

4

解释

在您的代码中,您创建了一个名为 的变量include_vars、一个带有键file和字符串值的字典group_vars/passes


解决方案

在 play 中定义 vars_files 的正确语法是vars_files声明:

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

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

---
- hosts: [machines]
  pre_tasks:
    - include_vars: 
        file: group_vars/passes
  roles: 
    - someroletodeployafilewiththispass
于 2018-07-25T15:47:42.027 回答