无法使用 pyvmomi 创建顶级目录

Failed to create top level directory using pyvmomi

我正在使用 python 3.7 和 pyvmomi 6.7 我正在连接到 exsi 主机(6.7 版免费许可证)并尝试使用我的 python 脚本部署虚拟机。在其中一个步骤中,我试图在数据存储中创建一个目录(用于存储 iso 和 vmdk)。 这是创建目录的代码片段,

fmgr = host['content'].fileManager
dco = vm['storage']['root']['dc']
dirname = '[' + dso.info.name + '] ' + vm['name']
logger.info('Creating Directory {} on {}'.format(
  dirname, dso.info.name))
try:
  fmgr.MakeDirectory(name=dirname, datacenter=dco,
      createParentDirectories=False)
except vim.fault.FileAlreadyExists as e:
  logger.info('Directory {} already exists on {} - {}'.format(
    dirname, dso.info.name, str(e)))
  return True
except vim.fault.InvalidDatastore as e:
  logger.error('Invalid datastore: {} - {}'.format(
    dso.info.name, str(e)))
  return False
except vim.fault.RuntimeFault as e:
  logger.error('Runtime error while creating directory {} on {} - {}'.format(
    dirname, dso.info.name, str(e)))
  return False
except Exception as e:
  logger.error('Failed to create top directory {}. - {}'.format(
    dirname, str(e)))

我在尝试创建目录时遇到此错误,

pyVmomi.VmomiSupport.RestrictedVersion: (vim.fault.RestrictedVersion) {
   dynamicType = <unset>,
   dynamicProperty = (vmodl.DynamicProperty) [],
   msg = 'Current license or ESXi version prohibits execution of the requested operation.',
   faultCause = <unset>,
   faultMessage = (vmodl.LocalizableMessage) []
}

相同的代码能够为 exsi 6.5 版创建目录(免费许可证) 根据 https://github.com/vmware/pyvmomi 的兼容性策略部分,应该支持 exsi 6.7。

版本有功能限制吗?

我们还有其他方法可以在数据存储中创建顶级目录吗?

是否有任何其他 python 库用于管理 VMware 中的虚拟机(从 exsi 6.0 开始支持)?

关键是 ESXi 主机拥有的许可证类型。如果它有免费许可证,那么 API 将允许只读操作,所有其他操作将被阻止,并显示 '当前许可证或 ESXi 版本禁止执行请求的操作 ' 信息。 引用自 one of the vmware blogs,

Access to the vSphere API is governed by the variousvSphere Editions which provides both read and write access to the API. If you are using vSphere Hypervisor (free edition of ESXi), the vSphere API will only be available as read-only.

我在另一个许可版本的 ESXi 上尝试了我的相同代码,猜猜是什么,代码成功执行并创建了 VM。 发现其中一个 answer in ServerFault 陈述相同。

问题是 SDK 的原始文档,Python API 或者社区样本没有说明这个限制。