运行Ansible Molecule测试时遭遇SSL证书验证错误及Python版本配置问题求助
一、SSL证书验证失败错误的解决办法
从你提供的错误日志可以看到,核心问题是Ansible Galaxy的API请求触发了SSL验证失败:
ERROR! Unknown error when attempting to call Galaxy at 'https://galaxy.ansible.com/api/': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618)>
以下是几种可行的解决思路:
1. 临时禁用SSL验证(测试环境可用,不推荐生产)
你可以在执行ansible-galaxy命令时添加--ignore-certs参数跳过验证:
ansible-galaxy collection install -v --force --ignore-certs community.docker:>=1.9.1
或者在/etc/ansible/ansible.cfg的[galaxy]段添加配置永久禁用:
[galaxy] verify_ssl = False
2. 安装信任的CA证书(推荐生产环境)
如果是因为系统未信任Galaxy的SSL证书(或企业代理的证书),可以手动导入证书:
- 下载Galaxy的根CA证书,或获取你的网络代理提供的证书文件(比如
galaxy-ca.crt) - 将证书放到系统CA信任目录(以RHEL/CentOS为例):
cp galaxy-ca.crt /etc/pki/ca-trust/source/anchors/ update-ca-trust extract - 或者直接在
ansible.cfg里指定CA证书路径:[galaxy] ca_cert = /path/to/your/galaxy-ca.crt
3. 排查网络代理配置
如果你通过代理访问Galaxy,需要确保代理的证书已被系统信任,同时在ansible.cfg中配置代理参数:
[galaxy] http_proxy = http://your-proxy:port https_proxy = https://your-proxy:port
二、Ansible与Molecule的Python版本不一致配置调整
你的环境中Ansible 2.9默认绑定Python2.7,而Molecule 3.6.1使用Python3.6,这是因为Ansible 2.9对Python2的兼容性较好,但Molecule从3.x版本开始要求Python3。可以通过以下方式统一或调整配置:
1. 修改Ansible的默认Python解释器
在/etc/ansible/ansible.cfg的[defaults]段添加配置,让Ansible优先使用Python3:
[defaults] # 自动检测目标主机的Python解释器(推荐) interpreter_python = auto_silent # 或者直接指定本地Python3路径 # interpreter_python = /usr/bin/python3
也可以在playbook中针对特定主机单独设置:
- hosts: all vars: ansible_python_interpreter: /usr/bin/python3
2. 使用虚拟环境统一环境(最佳实践)
创建一个Python3虚拟环境,同时安装Ansible和Molecule,确保两者使用同一Python版本:
# 创建虚拟环境 python3 -m venv ansible-molecule-env # 激活虚拟环境 source ansible-molecule-env/bin/activate # 安装指定版本的工具 pip install ansible==2.9.27 molecule==3.6.1 molecule-docker
之后所有的Ansible和Molecule命令都在这个虚拟环境中执行,避免版本冲突。
内容的提问来源于stack exchange,提问作者Raghavendra Guttur




