создать виртуальную машину с помощью модуля pyvmomi из файлов .vmx и .vmdk

Я пытался создать новую виртуальную машину с использованием существующих файлов виртуальной машины .vmx и .vmdk с хоста ESX в Python с использованием модуля pyvmomi. Я новичок в pyvmomi, и для pyvmomi не так много интерактивной помощи. Я проверил пример кода в github(https://github.com/vmware/pyvmomi-community-samples/tree/298bf74446f3fcc5743d6435763ff6dc16ab4cbc/samples), но ничего не найдено. Пожалуйста, дайте мне указатели.


person pythonuser    schedule 23.03.2015    source источник
comment
Похоже, вы хотите создать клон. Это правильно?   -  person Michael Rice    schedule 23.03.2015
comment
Я работаю над проектом резервного копирования-восстановления, где мне нужно восстановить существующую виртуальную машину/создать новую виртуальную машину из ранее зарезервированных файлов .vmx и vmdk.   -  person pythonuser    schedule 23.03.2015
comment
Когда вы сделаете это, будет ли исходная виртуальная машина, использующая этот файл vmx и vmdk, находиться в инвентаре, или она будет находиться в новом месте, поэтому она будет считаться новой виртуальной машиной для хоста или vcenter?   -  person Michael Rice    schedule 23.03.2015
comment
Привет Майк, Это будет считаться новым vm. Он не имеет состояния, поэтому это может быть новый хост или тот же хост.   -  person pythonuser    schedule 23.03.2015


Ответы (2)


Допустим, имя Virtualachine: 1001-web1.myhost.com

Тогда хост-система, на которую вы хотите его поместить: host1.myesxhost.com

На хосте есть хранилище данных с именем: Local1.

Хост находится в папке с именем: Prod.

Вам нужно получить файлы с виртуальной машины в хранилище данных Local1. Я позволю тебе разобраться с этой частью. Их нужно поместить в папку с именем: 1001-web1.myhost.com

Затем вам нужно найти папку Prod и хост-систему host1.myesxhost.com в инвентаре, чтобы у вас был ManagedObjectRef для них. Вы можете использовать searchIndex.FindByDnsName, чтобы найти хост, и searchIndex.FindByInventoryPath, чтобы найти папку (или несколько других методов..)

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

si = connect.SmartConnect(xxx)
host = si.content.searchIndex.FindByDnsName(None,"host1.myesxhost.com", False)
folder = si.content.searchIndex.FindByInventoryPath(xxx)
task = folder.RegisterVM_Task(path="[Local1] 1001-web1.myhost.com/1001-web1.myhost.com.vmx", name="new vm name", asTemplate=False, pool=None, host=host)

Отсюда вы сможете отслеживать процесс задачи после ее успешного завершения, task.info.result будет содержать MOREF новой виртуальной машины.

Это псевдокод, поэтому синтаксис может быть отключен, но вам придется следовать этому процессу.

person Michael Rice    schedule 23.03.2015

Если вы знаете путь хранилища данных к файлу vmx, вы можете использовать следующее:

from pyVim import folder

folder.Register("[datastore]TestVM/TestVM.vmx")
person Branislav Abadjimarinov    schedule 07.09.2015