Не удалось создать каталог верхнего уровня с помощью 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)?


person Soumyajit    schedule 30.05.2020    source источник


Ответы (1)


Ключевым моментом является тип лицензии, которую имеет хост ESXi. Если у него бесплатная лицензия, то API разрешит операции только для чтения, а все остальные операции будут заблокированы сообщением «Текущая лицензия или версия ESXi запрещает выполнение запрошенной операции». Цитата из одного из vmware блоги,

Доступ к API vSphere регулируется различными редакциями vSphere, которые обеспечивают доступ к API как для чтения, так и для записи. Если вы используете vSphere Hypervisor (бесплатная версия ESXi), vSphere API будет доступен только для чтения.

Я попробовал свой код на другой лицензионной версии ESXi, и угадайте, что код успешно выполнился и создал виртуальные машины. Нашел один из ответа в ServerFault, в котором говорится то же самое.

Проблема заключалась в том, что в исходных документах для SDK, Python API или образцах сообщества ничего не говорится об этом ограничении.

person Soumyajit    schedule 10.07.2020