我一直在与 Microsoft Azure 合作,使用 Azure SDK for Python 构建虚拟机,现在我想从现有虚拟机创建托管映像。
我看到有一种方法可以在 power shell 中做到这一点
但是经过长时间的研究,我没有找到如何在 python sdk 中做到这一点。我的目标是能够将虚拟机保存到映像中并在之后加载它(我使用的是 ARM 而不是 ASM)。
我一直在与 Microsoft Azure 合作,使用 Azure SDK for Python 构建虚拟机,现在我想从现有虚拟机创建托管映像。
我看到有一种方法可以在 power shell 中做到这一点
但是经过长时间的研究,我没有找到如何在 python sdk 中做到这一点。我的目标是能够将虚拟机保存到映像中并在之后加载它(我使用的是 ARM 而不是 ASM)。
经过很长时间试图弄清楚这一点,我终于能够从虚拟机捕获图像。首先,需要对 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)
我发现创建图像有两个选项:
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)
这些是什么,我不知道,也没有解释它们是什么。所以我没有用这种方式
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()对象是强制性的,因为这是预期的对象类型
创建计算客户端:
解除分配和泛化:
# 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 创建图像(可以适应你的场景):