如何在Ansible Jinja模板中引入加密文件?
解决方法
Jinja的include语句只会直接读取文件的原始内容,不会自动解密Ansible Vault加密的文件,所以得换用Ansible的lookup插件来获取解密后的内容。
方法一:修改private-copy.key模板
把private-copy.key里的内容替换成:
{{ lookup('file', 'private.key') }}
Ansible渲染模板时,会自动解密private.key并将明文内容写入private-copy.key。
注意事项
- 运行Ansible时必须提供Vault密码,比如用命令参数:
或者设置环境变量:ansible-playbook your_playbook.yml --vault-password-file ~/.pass.txtexport ANSIBLE_VAULT_PASSWORD_FILE=~/.pass.txt - 确保private.key的路径正确:如果文件在角色的
files目录下,直接写文件名即可;如果是其他路径,要写相对或绝对路径。
方法二:用copy模块直接生成文件
如果不想维护模板,也可以在playbook里用copy模块直接写入解密后的内容:
- name: 生成解密后的私钥文件 copy: content: "{{ lookup('file', 'private.key') }}" dest: /目标路径/private-copy.key mode: '0600' # 私钥文件权限建议设为0600,保证安全性
这种方法无需额外模板文件,直接通过playbook任务生成目标文件。
内容的提问来源于stack exchange,提问作者Titou
相关产品推荐
相关产品推荐

