Как я могу экспортировать машину VirtualBox в устройство OVA, используя Python?

Мне нужно создать (экспортировать) виртуальную машину (VirtualBox) в устройство OVA/OVF.

Я пытался использовать IMachine.export_to() метод (через оболочку pyvbox), например:

import virtualbox
from virtualbox.library import ExportOptions


vbox = virtualbox.VirtualBox()
vm = vbox.find_machine(VM_NAME)

appliance = vbox.create_appliance()
p = appliance.write('ovf-2.0',
                    [ExportOptions.create_manifest],
                    '~/tmp/test5.ovf')
desc = slredmine.export_to(appliance, '~/tmp/test5.ovf')

Приведенный выше код не делает то, что я хочу: ova/ovf не создается.

ОБНОВИТЬ

Порядок инструкций был неверным. Смотрите мой ответ, написанный ниже.

2 ответа

Решение

Решаемая

import virtualbox
from virtualbox.library import ExportOptions

VM_NAME = 'foovmname'    

vbox = virtualbox.VirtualBox()
vm = vbox.find_machine(VM_NAME)

appliance = vbox.create_appliance()
desc = slredmine.export_to(appliance, VM_NAME)
p = appliance.write('ovf-2.0',
                    [ExportOptions.create_manifest],
                    '~/tmp/test5.ovf')

Согласно документации pyvbox, он может экспортировать только в формат OVF, но это не должно иметь большого значения, в зависимости от того, что вы хотите с ним делать.

Документация цитата:

Как и при импорте, сначала вызовите IVirtualBox.create_appliance(), чтобы создать пустой объект IAppliance.

Для каждой машины, которую вы хотите экспортировать, вызовите IMachine.export_to() с объектом IAppliance, который вы только что создали. Каждый такой вызов создает один экземпляр IVirtualSystemDescription внутри устройства.

При желании вызовите IVirtualSystemDescription.set_final_values ​​() для каждой виртуальной системы (машины), чтобы переопределить предложения, сделанные процедурой IMachine.export_to().

Наконец, вызовите write() со спецификацией пути, чтобы записать файл OVF.

Не стесняйтесь поделиться своим кодом, если вы застряли.

Другие вопросы по тегам