如何通过vSphere 6.5 Python vCenter API获取VMware虚拟机UUID及解决返回结果缺失identity字段问题
为什么vCenter REST API返回的VM数据中没有
identity字段? 我之前也碰到过类似的问题,通常是以下几个原因导致的,你可以逐一排查:
1. 未显式指定fields查询参数
vCenter REST API默认只会返回核心默认字段,identity并不在默认返回列表里。你需要在请求URL中通过fields参数显式要求返回这个字段。
比如修改后的请求URL应该是:
https://{api_host}/rest/vcenter/vm/{vm}?fields=identity
如果需要同时返回其他字段,可以用逗号分隔,比如:
https://{api_host}/rest/vcenter/vm/{vm}?fields=identity,name,status
用Python发起请求的示例代码:
import requests # 替换为你的实际参数 vm_id = "vm-123" api_host = "vcenter.example.com" session_token = "your-auth-token" url = f"https://{api_host}/rest/vcenter/vm/{vm_id}?fields=identity" headers = {"Authorization": f"Bearer {session_token}"} # 注意:生产环境请开启证书验证,不要用verify=False response = requests.get(url, headers=headers, verify=False) if response.status_code == 200: vm_data = response.json() print(vm_data.get('value', {}).get('identity')) else: print(f"请求失败: {response.text}")
2. API版本/ vCenter服务器版本不兼容
identity字段是在较新的vSphere API版本中引入的(比如vSphere 7.0 Update 3及以后)。如果你的vCenter服务器版本比较旧(比如6.7或更早),API响应里根本不会包含这个字段。
你可以登录vCenter Web界面查看服务器版本,再对照官方的API文档确认该版本是否支持identity结构。
3. 账号权限不足
如果你的API认证账号没有足够的权限读取虚拟机的标识信息,vCenter API会自动过滤掉identity这类需要特定权限的字段。
请检查账号是否拥有VirtualMachine.Inventory或VirtualMachine.Read相关的权限,可以在vCenter的权限管理中给账号添加对应的虚拟机读取权限。
内容的提问来源于stack exchange,提问作者pitt
相关产品推荐
相关产品推荐

