pipenv shell中执行openstack命令报auth-url参数缺失错误如何解决
解决思路
该报错本质是OpenStack命令行客户端未获取到身份认证所需的核心配置参数,结合你此前可通过Heat正常创建资源的前提,可排除认证信息本身无效、Keystone服务异常的问题,按以下步骤排查即可:
- 第一步:重新加载认证配置文件
pipenv启动的虚拟环境shell不会自动继承父shell的环境变量,你之前在系统shell加载的openrc认证文件在虚拟环境中失效。进入pipenv shell后首先重新执行加载命令:source /path/to/your/xxx-openrc.sh
输入对应账号密码后,再执行openstack命令测试。 - 第二步:手动验证认证参数
若重新加载后仍报错,执行以下命令检查核心参数是否正常加载:echo $OS_AUTH_URL
正常应输出格式为http://<控制节点IP>:5000/v3的认证地址,同时确认OS_PROJECT_NAME、OS_USERNAME、OS_PASSWORD、OS_USER_DOMAIN_NAME、OS_PROJECT_DOMAIN_NAME这几个必填参数均有有效值。 - 第三步:配置虚拟环境自动加载认证参数
要避免每次进入虚拟环境都手动加载openrc,可在pipenv项目根目录下创建.env文件,将openrc文件中的所有配置项写入该文件,示例如下:
OS_AUTH_URL=http://192.168.1.10:5000/v3 OS_PROJECT_NAME=admin OS_USER_DOMAIN_NAME=Default OS_PROJECT_DOMAIN_NAME=Default OS_USERNAME=admin OS_PASSWORD=你的管理员密码 OS_REGION_NAME=RegionOne OS_INTERFACE=public OS_IDENTITY_API_VERSION=3
保存后重新进入pipenv shell,会自动加载该文件的环境变量,无需手动执行source操作。
- 第四步:权限排查
如果你的openrc文件存放在/root等权限受限目录下,且启动pipenv的是普通用户,需将openrc文件移动到当前用户可访问的目录后再执行加载操作。
如果需要快速验证问题根因,可直接在pipenv shell中携带全量参数执行命令,只要该命令可正常返回结果,即可确认是环境变量未加载导致的问题:openstack --os-auth-url <你的认证地址> --os-project-name <项目名> --os-username <用户名> --os-password <密码> network list --external --column Name
内容的提问来源于stack exchange,提问作者appleuser
相关产品推荐
相关产品推荐

