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
相关产品推荐
相关产品推荐

