Ansible调用hashi_vault插件提示需安装hvac但已安装问题咨询
问题背景
运行如下Ansible Playbook时触发执行报错:
- name: Vault Test set_fact: msg: "{{ lookup('hashi_vault', 'secret=secret token=token url=https://address')}}"
执行时抛出的致命错误信息:
fatal: [*****]: FAILED! => {"msg": "An unhandled exception occurred while running the lookup plugin 'hashi_vault'. Error was a <class 'ansible.errors.AnsibleError'>, original message: Please pip install hvac to use the hashi_vault lookup module.. Please pip install hvac to use the hashi_vault lookup module."}
当前运行环境已安装hvac依赖,组件版本信息如下:
ansible 5.9.0 ansible-core 2.12.7 hvac 0.10.8 pyhcl 0.4.4
报错原因
- Python解释器环境不匹配:安装hvac时调用的pip对应的Python环境,和Ansible运行Playbook时实际加载的Python解释器不是同一个。该问题多出现于系统存在多版本Python、使用虚拟环境、sudo提权执行Playbook的场景,pip安装的hvac被放到了Ansible无法读取的site-packages路径下。
- hvac版本兼容缺陷:当前安装的hvac 0.10.8版本存在已知导入异常,当子依赖版本匹配存在问题时,导入逻辑抛出的异常会被hashi_vault插件的检测逻辑误判为「未安装hvac」,抛出和实际根因不符的报错提示。
修复方案
- 先查询Ansible实际调用的Python解释器绝对路径,执行命令:
ansible -m setup localhost | grep ansible_python.executable - 用查询到的Python解释器,以
-m pip的方式彻底卸载所有历史版本的hvac,避免多版本冲突,示例命令(将路径替换为你实际查询到的Python路径):
该命令可重复执行2-3次,直到提示没有安装hvac为止。/usr/bin/python3 -m pip uninstall hvac -y - 安装适配ansible-core 2.12版本的稳定版hvac:
注意:如果执行Playbook时配置了/usr/bin/python3 -m pip install hvac==0.10.14become: yes提权,安装时不要加--user参数,确保hvac被安装到全局site-packages目录,可被提权后的进程正常读取。 - 执行导入验证,命令无输出即代表环境正常:
验证通过后重新执行Playbook即可恢复正常。/usr/bin/python3 -c "import hvac"
内容的提问来源于stack exchange,提问作者mario xu
相关产品推荐
相关产品推荐

