如何使用azure-sdk-for-python创建具有自定义映像的VM?

时间:2015-10-22 00:37:45

标签: python azure

我正在使用" new"用于python的azure sdk: https://github.com/Azure/azure-sdk-for-python

Linked是一个用作文档的用法示例: https://azure-sdk-for-python.readthedocs.org/en/latest/resourcemanagementcomputenetwork.html

在此示例中,他们从公共图像创建实例,提供图像发布者,商品,SKU和版本。 我想从自定义图像创建一个实例(存在于"我的图像"在天蓝色的门户网站上),我只有一个图像名称,没有发布者或SKU。

支持吗?我该怎么办?

注意:如果可能的话,我想避免使用azure CLI命令,只依赖于python库。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果其他人遇到此问题,SourceImage实际上是旧方法(ASM)。对于ARM,以下内容将初始化StorageProfile以提供对自定义映像的引用:

storage_profile = azure.mgmt.compute.StorageProfile(
    os_disk=azure.mgmt.compute.OSDisk(
        caching=azure.mgmt.compute.CachingTypes.none,
        create_option=azure.mgmt.compute.DiskCreateOptionTypes.from_image,
        name=OS_DISK_NAME,
        virtual_hard_disk=azure.mgmt.compute.VirtualHardDisk(
            uri='https://{0}.blob.core.windows.net/vhds/{1}.vhd'.
            format(STORAGE_NAME, OS_DISK_NAME),
        ),
        operating_system_type='Linux',
        source_image=azure.mgmt.compute.VirtualHardDisk(
            uri='https://{0}.blob.core.windows.net/{1}/{2}'.format(
                STORAGE_NAME, CUSTOM_IMAGE_PATH, CUSTOM_IMAGE_VHD),
        ),
    ),
)

以上两个非常重要的事情是' operating_system_type'以及创建source_image的方式。

答案 1 :(得分:0)

Azure SDK for Python支持使用自定义映像创建VM。

如果Azure门户上的“我的图像”中存在自定义图像,则可以使用Azure Python在存储上创建具有VHD图像OS_DISK_NAMESTORAGE_NAME参数的VM SDK。

Azure Python SDK API包装相同的功能REST API。请参阅REST API文档“创建或更新虚拟机”https://msdn.microsoft.com/en-us/library/azure/mt163591.aspx,创建具有映像的VM只需要osDisk存储配置文件元素(请参阅下面的快照)。

enter image description here

因此,示例代码仅部分修改(删除image_reference部分),如下所示:

# 4. Create the virtual machine

result = compute_client.virtual_machines.create_or_update(
    GROUP_NAME,
    azure.mgmt.compute.VirtualMachine(
        location=REGION,
        name=VM_NAME,
        os_profile=azure.mgmt.compute.OSProfile(
            admin_username=ADMIN_USERNAME,
            admin_password=ADMIN_PASSWORD,
            computer_name=COMPUTER_NAME,
        ),
        hardware_profile=azure.mgmt.compute.HardwareProfile(
          virtual_machine_size=azure.mgmt.compute.VirtualMachineSizeTypes.standard_a0
        ),
        network_profile=azure.mgmt.compute.NetworkProfile(
            network_interfaces=[
                azure.mgmt.compute.NetworkInterfaceReference(
                    reference_uri=nic_id,
                ),
            ],
        ),
        storage_profile=azure.mgmt.compute.StorageProfile(
            os_disk=azure.mgmt.compute.OSDisk(
                caching=azure.mgmt.compute.CachingTypes.none,
                create_option=azure.mgmt.compute.DiskCreateOptionTypes.from_image,
                name=OS_DISK_NAME, // Your VHD name
                virtual_hard_disk=azure.mgmt.compute.VirtualHardDisk(
                    uri='https://{0}.blob.core.windows.net/vhds/{1}.vhd'.format(
                        STORAGE_NAME, // your storage account name
                        OS_DISK_NAME, // Your VHD name
                    ),
                ),
            )
        ),
    ),
)