Python脚本使用OpenStack X-Auth-Token认证失败报KeyError求助
问题原因&修复方案
1. 核心错误:请求头配置错误
OpenStack API 要求直接将 X-Auth-Token 作为请求头的键,token 值作为对应值,你当前代码错误使用了 Authorization 头,结构完全不符合接口要求,这是认证失败的主要原因。
修正后的请求头配置:
headers = { 'Content-Type': 'application/json', 'X-Auth-Token': user_token }
2. 次要错误:请求URL带多余空格
你定义的images接口URL末尾多了一个空格,会导致请求路径匹配错误,也会触发认证失败,修正后:
req = { "flavors": "http://myip/v2.1/flavors", "images": "http://myip/v2.1/7d8fed2119e04ee79e15b5a2fac2f5da/images" }
3. 逻辑错误:异常判断条件不匹配
未认证时接口返回的是单数error字段,你代码里判断的是复数errors,导致认证失败时不会触发退出逻辑,程序会继续往下读取不存在的images字段,直接抛出KeyError。修正后的判断逻辑:
if 'error' in result_data : print('0') sys.exit(F'Error token, please check token: {result_data}')
4. 结构理解错误:返回值格式不符合预期
就算认证成功,GET /v2.1/{项目ID}/images 返回的result_data['images']是镜像列表(数组类型),不是单个镜像对象,不能直接取minDisk属性,需要遍历列表或者指定索引获取对应镜像的属性,示例:
# 示例:取第一个返回的镜像的minDisk属性 if len(result_data['images']) == 0: sys.exit("无可用镜像数据") target_min_disk = result_data['images'][0]['minDisk'] modulo.update( name = "Openstack_image disk:", desc = "Openstack image is %s " % str(target_min_disk), value = str(target_min_disk), )
内容的提问来源于stack exchange,提问作者alejandro
相关产品推荐
相关产品推荐

