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

PyVmomi遍历vCenter集群组数组生成字典的技术问题

解决pyVmomi遍历集群组对象的问题

我来帮你搞定这个遍历pyVmomi集群组的问题~你之前报错的原因很明确:clustr_group_info是一个包含vim.cluster.VmGroup和vim.cluster.HostGroup对象的数组,而你尝试遍历数组里的单个对象(clustr_group_info[0]),但这些组对象本身并不是可迭代的集合,所以才会抛出TypeError: 'vim.cluster.VmGroup' object is not iterable的错误。

下面是正确的处理方式,能帮你生成以name为键、host为值的字典列表:

from pyVmomi import vim

# 假设你已经获取到了clustr_group_info数组
group_dicts = []

for group in clustr_group_info:
    group_name = group.name
    # 根据组的类型分别处理
    if isinstance(group, vim.cluster.HostGroup):
        # 主机组直接提取关联的主机名称列表
        host_list = [host.name for host in group.hosts]
        group_dicts.append({"name": group_name, "host": host_list})
    elif isinstance(group, vim.cluster.VmGroup):
        # 虚拟机组需要提取每个虚拟机所在的主机,去重避免重复
        vm_hosts = set()
        for vm in group.vms:
            if vm.runtime and vm.runtime.host:
                vm_hosts.add(vm.runtime.host.name)
        group_dicts.append({"name": group_name, "host": list(vm_hosts)})

# 打印结果
for item in group_dicts:
    print(item)

代码说明:

  • 直接遍历clustr_group_info数组,每个元素是一个完整的组对象,而不是尝试迭代单个对象
  • 使用isinstance()区分主机组和虚拟机组,因为两者的关联属性不同(主机组是hosts,虚拟机组是vms)
  • 对于虚拟机组,通过vm.runtime.host获取虚拟机运行的主机,并用集合去重,避免同一主机多次出现
  • 最终生成的group_dicts就是你需要的字典列表,每个字典包含组名和对应的主机信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:09:56