无法使用 pyvmomi 查询 vcenter 服务器设备上的虚拟机

问题描述 投票:0回答:0

尝试使用 pyvmomi 从 vcenter 服务器设备获取虚拟机列表时出现以下错误。

pyVmomi.VmomiSupport.vim.fault.NoPermission: (vim.fault.NoPermission) {
   dynamicType = <unset>,
   dynamicProperty = (vmodl.DynamicProperty) [],
   msg = 'Permission to perform this operation was denied.',
   faultCause = <unset>,
   faultMessage = (vmodl.LocalizableMessage) [],
   object = 'vim.Folder:group-d1',
   privilegeId = 'System.View',
   missingPrivileges = (vim.fault.NoPermission.EntityPrivileges) [
      (vim.fault.NoPermission.EntityPrivileges) {
         dynamicType = <unset>,
         dynamicProperty = (vmodl.DynamicProperty) [],
         entity = 'vim.Folder:group-d1',
         privilegeIds = (str) [
            'System.View'
         ]
      }
   ]
}

这是我的 python 代码:

import atexit
import ssl
from pyVim import connect
from pyVmomi import vim
import pdb


def vconnect(hostIP,port=None):
    if (True):
        context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
        context.check_hostname = False
        context.verify_mode = ssl.CERT_NONE  # disable our certificate checking for lab
    else:
        context = ssl.create_default_context()
        context.options |= ssl.OP_NO_TLSv1_3
    #cipher = 'DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-GCM-SHA256'
    #context.set_ciphers(cipher)
   
    pdb.set_trace()
    if (port):
        service_instance = connect.SmartConnect(host=str(hostIP),  # build python connection to vSphere
                                                user="root",
                                                pwd="HagsLoff@1324",
                                                port=port,
                                                sslContext=context)
    else:
        service_instance = connect.SmartConnect(host=str(hostIP),  # build python connection to vSphere
                                                user="root",
                                                pwd="HagsLoff@1324",
                                                sslContext=context)

    atexit.register(connect.Disconnect, service_instance)  # build disconnect logic

    content = service_instance.RetrieveContent()

    container = content.rootFolder  # starting point to look into
    viewType = [vim.VirtualMachine]  # object types to look for
    recursive = True  # whether we should look into it recursively
    containerView = content.viewManager.CreateContainerView(container, viewType, recursive)  # create container view
    children = containerView.view

    for child in children:  # for each statement to iterate all names of VMs in the environment
        summary = child.summary
        print(summary.config.name)

# connecting to ESX host
vconnect("192.168.160.160")

# connecting to vcsa VM
vconnect("192.168.160.170", 443)

所以我正在使用在我的工作站 16 上运行的嵌套 ESX。我已经通过 Windows CLI 安装程序在此 ESX 主机上部署了 vcsa。查询 ESX 主机工作正常,而查询 vcenter 服务器设备 (vcsa) 则出现上述错误。

我看了这个关于设置“全局权限”的讨论;但是在我的 vcenter 服务器管理 VM 上,我的“管理”选项卡看起来不是这样的:

它看起来像这样:

所以显然我有一个“vcenter 服务器管理”设备,而不是所谓的“vsphere 客户端”。

所以有了这个上下文集,我有一些问题:

  1. 上面的错误是因为我的试用许可证吗?
  2. vcenter 服务器管理 (vcsa)”设备与“vsphere 客户端”有何不同?
  3. 是否可以更改 vcsa 上的“全局权限”,或者我是否需要让“vsphere 客户端”来执行此操作?

我尝试添加here提到的默认端口(443)无济于事。渴望很快收到你的来信

vmware vsphere vcenter pyvmomi
© www.soinside.com 2019 - 2024. All rights reserved.