Ansible2.8中如何解密inventory内的vault加密变量供URI模块使用
Ansible 2.8版本URI模块无法自动解密vault加密变量的解决方法
Ansible 2.8及更早版本存在部分模块无法自动触发嵌套参数内vault加密变量解密的问题,可通过以下方法解决:
- 方法1:使用
decrypt过滤器强制解密
直接在调用密码变量时添加decrypt过滤器,强制触发vault解密逻辑,修改后的task代码如下:- name: Create a JIRA issue uri: url: https://your.jira.example.com/rest/api/2/issue/ user: "{{ username }}" password: "{{ password | decrypt }}" method: POST body: "{{ lookup('file','issue.json') }}" force_basic_auth: yes status_code: 201 body_format: json - 方法2:通过set_fact提前解密变量
set_fact执行变量赋值时会自动处理vault解密,将解密后的变量传给URI模块即可,示例代码如下:- name: 解密JIRA访问密码 set_fact: jira_access_password: "{{ password }}" - name: Create a JIRA issue uri: url: https://your.jira.example.com/rest/api/2/issue/ user: "{{ username }}" password: "{{ jira_access_password }}" method: POST body: "{{ lookup('file','issue.json') }}" force_basic_auth: yes status_code: 201 body_format: json - 方法3:升级Ansible版本
该自动解密异常问题在Ansible 2.9及后续版本已被修复,升级Ansible版本可彻底解决此类模块解密异常问题。
排查验证提示
可添加如下debug任务确认vault密码本身可正常解密,排除vault密钥传入错误的问题:
- name: 验证密码解密有效性 debug: msg: "密码解密正常" when: password | decrypt | length > 0 no_log: true # 禁止日志输出避免密码泄露
运行playbook时需确保传入了正确的vault解密凭证,可通过--ask-vault-pass参数交互式输入密码,或通过--vault-password-file参数指定密码文件路径。
内容的提问来源于stack exchange,提问作者Sam Alex
相关产品推荐
相关产品推荐

