You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyvmomi获取虚拟机bootTime报错及扩展功能咨询

解决PyVmomi获取虚拟机启动时间报错的问题

问题原因

当虚拟机处于关机、挂起等非运行状态时,runtime.bootTime(或summary.runtime.bootTime)属性并不存在,使用collect_properties获取时不会返回该键,直接通过键访问会触发KeyError,导致报错。

修复方案

方案1:使用字典get方法安全获取属性

修改数据处理部分的代码,用get方法获取启动时间,指定默认值避免报错:

processed_data['boottime'] = vm_data.get('runtime.bootTime', 'N/A')

方案2:先判断虚拟机状态再处理

如果需要更精准的逻辑,可先判断虚拟机是否运行,再决定是否获取启动时间:

if vm_data['guest.guestState'] == 'running':
    processed_data['boottime'] = vm_data.get('runtime.bootTime', 'N/A')
else:
    processed_data['boottime'] = 'VM not running'

方案3:调整属性获取方式(备选)

如果collect_properties获取嵌套属性仍有问题,可改用直接遍历VM对象的方式(参考社区示例逻辑),但效率略低:

# 替换collect_properties部分的代码
vm_list = view.view
data = []
for vm in vm_list:
    processed_data = {}
    processed_data['name'] = vm.name
    # 其他属性处理逻辑保持不变
    processed_data['cpu_cores'] = vm.config.hardware.numCPU
    processed_data['memory_MB'] = vm.config.hardware.memoryMB
    processed_data['os'] = vm.config.guestFullName
    processed_data['state'] = vm.guest.guestState
    # 直接访问VM对象的启动时间属性
    processed_data['boottime'] = vm.runtime.bootTime if vm.runtime.bootTime else 'N/A'
    
    data.append(processed_data)

完整修改后的代码片段(方案1示例)

# Process and filter the fetched data
data = []
for vm_data in vm_data_list:
    processed_data = {}
    processed_data['name'] = vm_data['name']
    ip_addresses = [ip for net in vm_data['guest.net'] for ip in net.ipAddress if net.ipAddress and ':' not in ip and not ip.endswith(('.0', '.1'))]
    processed_data['ip'] = ", ".join(ip_addresses)
    processed_data['cpu_cores'] = vm_data['config.hardware.numCPU']
    processed_data['memory_MB'] = vm_data['config.hardware.memoryMB']
    processed_data['os'] = vm_data['config.guestFullName']
    processed_data['state'] = vm_data['guest.guestState']
    # 安全获取启动时间,避免KeyError
    processed_data['boottime'] = vm_data.get('runtime.bootTime', 'N/A')
    
    data.append(processed_data)

内容的提问来源于stack exchange,提问作者Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:28:16