0

我一直在与 Microsoft Azure 合作,使用 Azure SDK for Python 构建虚拟机,现在我想从现有虚拟机创建托管映像。

我看到有一种方法可以在 power shell 中做到这一点

但是经过长时间的研究,我没有找到如何在 python sdk 中做到这一点。我的目标是能够将虚拟机保存到映像中并在之后加载它(我使用的是 ARM 而不是 ASM)。

4

2 回答 2

1

经过很长时间试图弄清楚这一点,我终于能够从虚拟机捕获图像。首先,需要对 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)

我发现创建图像有两个选项:

  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()对象是强制性的,因为这是预期的对象类型

于 2020-10-01T11:53:50.793 回答
0

创建计算客户端:

解除分配和泛化:

    # 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。我没有像你这样的确切例子,但看到这个从 blob 创建图像(可以适应你的场景):

于 2017-10-10T23:55:50.747 回答