【问题标题】:Where are virtual switches kept in vSphere? (through pyVmomi)vSphere 中的虚拟交换机保存在哪里? (通过 pyVmomi)
【发布时间】:2014-07-26 22:56:04
【问题描述】:

我在一个虚拟交换机上有多个虚拟端口组。当我执行时

datacenters = si.RetrieveContent().rootFolder.childEntity
for datacenter in datacenters:
    hosts = datacenter.hostFolder.childEntity
    for host in hosts:
        networks = host.network
        for network in networks:
             print network.name

(si 是一个服务实例) 我得到了网络上的所有 vlan(端口组),但没有一个交换机(文档声称应该在网络目录中)。鉴于文件夹也有 name 属性,我查看过的所有文件夹都应该被打印出来。那么 vsphere/vcenter 将这些开关保存在哪里呢?

【问题讨论】:

    标签: python vmware vsphere


    【解决方案1】:

    要使用 pyVmomi 检索 vSwitches,您可以:

    def _get_vim_objects(content, vim_type):
        '''Get vim objects of a given type.'''
        return [item for item in content.viewManager.CreateContainerView(
            content.rootFolder, [vim_type], recursive=True
        ).view]
    
    content = si.RetrieveContent()
    for host in self._get_vim_objects(content, vim.HostSystem):
        for vswitch in host.config.network.vswitch:
            print(vswitch.name)
    

    结果是:

    vSwitch0
    vSwitch1
    vSwitch2
    

    要检索 Distributed vSwitches,您可以使用带有 vim_type=vim.dvs.VmwareDistributedVirtualSwitch 参数的 _get_vim_objects 函数(上图)。

    【讨论】:

    • 我不确定这是否仍然有助于@Magitrek,但我的一个没有帐户的系统管理员朋友指出,这是正确的答案,而不是 2014 年的答案,因此赞成 +否决投票以重新排序这些。 “第一个答案完全错误,它指的是端口组。第二个答案完全正确,它指的是实际的 vSwitch。”
    【解决方案2】:

    获取 host.network 将为您提供一组网络对象,但不提供交换机信息。要获取开关信息,这可能是最直接的方法

    datacenters = si.RetrieveContent().rootFolder.childEntity
    for datacenter in datacenters:
        networks = datacenter.networkFolder.childEntity
        for network in networks:
            print network.name
    

    网络文件夹包含虚拟交换机以及所有端口组。

    【讨论】:

    • 这与我的问题中的代码做同样的事情,即打印端口组,但不打印开关。我确定有开关,当我运行esxcli network vswitch standard list 时,我发现了三个开关。我的问题是如何获取它们的实例。
    • 嗯,我没有任何地方可以测试有标准的 vswitch,但我发布的代码确实列出了分布式虚拟交换机。我原以为也会列出标准的 vswitch,但可能不会。
    • 我找到了一个具有标准开关的测试 vCenter,并且在我运行该代码时确实看到了标准开关。您能否发布您在 vCenter Web 客户端的网络选项卡中看到的内容以及您从脚本中获得的内容的屏幕截图?
    • 在网络选项卡中,它不显示任何开关。它显示了 vmcenter,它下面有主机,以及它下面的所有 vlan。您的工具和 esxcli 端口组查询都会显示所有 vlan。如果我运行 esxcli 端口组查询,它会显示每个 vlan 都与一个虚拟交换机相关联。
    • 如果它没有出现在 vCenter 中,那么 pyVmomi 模块将看不到它。听起来好像在单个 esxi 主机上配置了一些东西,但没有出现在 vCenter 中,我不确定为什么会这样。
    【解决方案3】:

    这是我用来在 vCenter 中查找所有 DV 交换机并检查版本的工具。

    def find_all_dvs():
    Q = "DVS unsupported versions"
    try:
        log.info("Testing %s" % Q)
        host_ip, usr, pwd = vx.vc_ip, vx.vc_mu, vx.vc_mp  # Reusing credentials
        is_Old = False
        si = connect.SmartConnect(host=host_ip, user=usr, pwd=pwd, port=int("443"))
        datacenters = si.RetrieveContent().rootFolder.childEntity
        for datacenter in datacenters:
            networks = datacenter.networkFolder.childEntity
            for vds in networks:
                if (isinstance(vds, vim.DistributedVirtualSwitch)): # Find only DV switches
                    log.debug("DVS version: %s, DVS name: %s" %(vds.summary.productInfo.version, vds.summary.name))
                    if loose(vds.summary.productInfo.version) <= loose("6.0.0"):
                        is_Old = True
        if is_Old:
            log.info("vSphere 7.x unsupported DVS found.")
            return
        else:
            return
    
    except Exception as err:
        log.error("%s error: %s" % (Q, str(err)))
        log.error("Error detail:%s", traceback.format_exc())
        return    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多