Ansible Tower os_server模块报错:shade依赖问题求助
结合你的环境(RHEL7.4、搭载OpenStack 3.12.0的IBM PowerVC),我整理了几个针对性的排查和解决步骤,帮你定位问题:
1. 确认Ansible实际调用的Python环境是否安装了shade
很多时候Tower的全局Python环境和Ansible执行时使用的环境并不一致。你可以直接用playbook里指定的解释器路径验证:
# 用你设置的Python解释器检查shade是否存在 /usr/bin/env python -c "import shade; print('Shade版本:', shade.__version__)"
如果这条命令报错No module named shade,说明该Python环境确实未安装shade,需要用对应pip安装:
# 注意匹配Python版本,Python2用pip,Python3用pip3 /usr/bin/env pip install shade
2. 匹配shade版本与OpenStack 3.12.0的兼容性
OpenStack不同版本对shade的版本有严格要求,PowerVC的OpenStack 3.12.0对应OpenStack Train版本,建议安装兼容的shade版本(比如1.30.x系列),避免版本不兼容导致的隐性问题:
/usr/bin/env pip install shade==1.30.0
3. 检查Ansible Tower的执行环境配置
如果你的Tower使用了执行环境(Execution Environments)(AWX/Tower 18+的特性),全局安装的shade不会被容器化的执行环境识别。这时候需要:
- 定制执行环境镜像:在Dockerfile中添加
RUN pip install shade(指定兼容版本) - 将定制好的镜像导入Tower,并在执行playbook时选择该环境
如果是旧版Tower没有执行环境,要确保Tower运行Ansible的用户(比如awx用户)的Python环境里安装了shade:
sudo -u awx /usr/bin/env pip install shade
4. 验证OpenStack认证的有效性
有时候认证失败会被误报为shade缺失,你可以先在Tower机器上用OpenStack客户端测试连接PowerVC:
# 设置PowerVC的认证环境变量(替换为你的实际信息) export OS_AUTH_URL=http://your-powervc-host:5000/v3 export OS_USERNAME=your-username export OS_PASSWORD=your-password export OS_PROJECT_NAME=your-project export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default # 测试是否能获取实例列表 openstack server list
如果这个命令能正常返回结果,说明认证信息没问题;如果失败,需要先修正playbook里的auth参数或环境变量配置。
5. 尝试指定Python解释器的绝对路径
/usr/bin/env python可能指向系统默认的Python2,而shade可能安装在Python3环境中。你可以在playbook里直接指定Python3的绝对路径试试:
- hosts: localhost vars: ansible_python_interpreter: "/usr/bin/python3" tasks: - name: 创建VM实例 os_server: # 你的os_server配置参数
内容的提问来源于stack exchange,提问作者southwind

