Сохранение виртуальной машины в образ с помощью azure python sdk

Я работал с Microsoft Azure над созданием виртуальных машин с помощью Azure SDK для Python, и теперь я хочу создать управляемый образ из существующей виртуальной машины.

Я видел, что есть способ сделать это в Power Shell здесь

Но после долгих исследований я не нашел, как это сделать в python sdk. Моя цель - сохранить виртуальную машину в образ и потом загрузить ее (я использую ARM, а не ASM).


person Turge    schedule 10.10.2017    source источник


Ответы (2)


После долгих попыток понять это, я наконец смог сделать снимок с vm. Во-первых, необходимо освободить и обобщить виртуальную машину:

# Deallocate
async_vm_deallocate = self.compute_client.virtual_machines.deallocate(resource_group.name, names.vm)
async_vm_deallocate.wait()

# Generalize (possible because deallocated)
self.compute_client.virtual_machines.generalize(resource_group.name, names.vm)

Я обнаружил, что есть 2 варианта создания изображения:

  1. compute_client.virtual_machines.capture(resource_group_name=resource_group.name, vm_name=vm.name, parameters=parameters)

для этого требуется создать ComputeManagmentClient и следующий импорт:

from azure.mgmt.compute.v2015_06_15.models import VirtualMachineCaptureParameters

параметры должны иметь тип объекта: ~ azure.mgmt.compute.v2015_06_15.models.VirtualMachineCaptureParameters.

У объекта VirtualMachineCaptureParameters есть 3 обязательных параметра: vhd_name_prefix (str), имя целевого контейнера (str), перезапись vhds (bool).

что это такое, я понятия не имею, и нет объяснения, что это такое. так что я не использовал этот способ

  1. (как я предпочитаю использовать) compute_client.images.create_or_update(resource_group_name=resource_group, image_name=unique_name, parameters=params)

для этого требуется создать ComputeManagmentClient и следующий импорт:

from azure.mgmt.compute.v2020_06_01.models import Image, SubResource

и это довольно просто

sub_resource = SubResource(id=vm.id)
params = Image(location=LOCATION, source_virtual_machine=sub_resource)
i = compute_client.images.create_or_update(resource_group_name=resource_group, image_name=image_name, parameters=params)
i.wait()

создание объектов SubResource () и Image () является обязательным, поскольку это ожидаемый тип объекта.

person ShaiB    schedule 01.10.2020
comment
Привет, я проделал те же шаги и смог сохранить виртуальную машину в образ. Но когда я пытаюсь создать новую виртуальную машину, используя изображение, это не удается с ошибкой ниже. msrestazure.azure_exceptions.CloudError: Azure Error: OSProvisioningClientError Message: OS Provisioning for VM 'xx' did not finish in the allotted time. However, the VM guest agent was detected running. This suggests the guest OS has not been properly prepared to be used as a VM image (with CreateOption=FromImage). To resolve this issue, either use the VHD as is with CreateOption=Attach or prepare it properly for use as an image - person Aravind Reddy; 23.07.2021

Создайте вычислительный клиент:

Освободить и обобщить:

    # Deallocate
    async_vm_deallocate = self.compute_client.virtual_machines.deallocate(resource_group.name, names.vm)
    async_vm_deallocate.wait()

    # Generalize (possible because deallocated)
    self.compute_client.virtual_machines.generalize(resource_group.name, names.vm)

Создайте образ, там группа операций compute_client.images. У меня нет точного примера, подобного вашему, но посмотрите этот, чтобы создать изображение из капли (может быть адаптировано к вашему сценарию):

person Laurent Mazuel    schedule 10.10.2017
comment
Привет, Лоран, спасибо за помощь. На данный момент я создал несколько виртуальных машин в разных группах ресурсов. Теперь вопрос в том, откуда мне взять blob_uri? Как указано в link, мне больше не нужно беспокоиться об учетных записях хранения, поэтому как я смогу получить файл blob или .vhd? заранее спасибо - person Turge; 16.10.2017
comment
Если вы хотите управлять своими BLOB-объектами и vhd, вы не можете использовать управляемый диск. stackoverflow.com/questions/42388855/ - person Laurent Mazuel; 17.10.2017