【问题标题】:Azure Python SDK Compute Client isn't Using Managed Disk ParametersAzure Python SDK 计算客户端未使用托管磁盘参数
【发布时间】:2020-02-17 03:45:02
【问题描述】:

我正在使用计算客户端创建一个 VM(使用 create_or_update),并且我希望该 VM 具有标准硬盘而不是高级 ssd 作为其操作系统磁盘。我应该能够在托管磁盘参数中指定它,但是当我这样做时,VM 仍然使用高级 SSD 创建。 这是我的虚拟机参数。

vm_parameters = {
        'location': vm_location,
        'os_profile': {
            'computer_name': vm_name,
            'admin_username': vm_name,
            'admin_password': vm_password,
            'custom_data': startup_script
        },
        'hardware_profile': {
            'vm_size': 'Standard_B1ls'
        },
        'storage_profile': {
            'image_reference': {
                'publisher': 'Canonical',
                'offer': 'UbuntuServer',
                'sku': '16.04.0-LTS',
                'version': 'latest'
            },
            'os_disk': {
                'caching': 'None',
                'create_option': 'FromImage',
                'disk_size_gb': 30,
                'managed_disk_parameters': {
                    'storage_account_type': 'Standard_LRS'
                }
            }
        },
        'network_profile': {
            'network_interfaces': [{
                'id': nic_info.id
            }]
        },
        'tags': {
            'expiration_date': 'expirationdatehere'
        }
    }

仅将存储帐户类型指定为 Standard_LRS 并不会改变任何内容。我应该怎么做才能让我的 VM 使用标准硬盘而不是高级 ssd 作为其操作系统磁盘创建?

【问题讨论】:

    标签: python azure azure-sdk azure-sdk-python


    【解决方案1】:

    根据我的测试,你在vm_parameters中使用了错误的参数。请将managed_disk_parameters 更新为managed_disk。更多详情请参考https://docs.microsoft.com/en-us/python/api/azure-mgmt-compute/azure.mgmt.compute.v2019_03_01.models.osdisk?view=azure-python。

    例如:

    import os
    import traceback
    
    from azure.common.credentials import ServicePrincipalCredentials
    from azure.mgmt.resource import ResourceManagementClient
    from azure.mgmt.network import NetworkManagementClient
    from azure.mgmt.compute import ComputeManagementClient
    from azure.mgmt.compute.models import DiskCreateOption
    
    from msrestazure.azure_exceptions import CloudError
    
    from haikunator import Haikunator
    
    haikunator = Haikunator()
    
    AZURE_TENANT_ID= ''
    AZURE_CLIENT_ID=''
    AZURE_CLIENT_SECRET='' 
    AZURE_SUBSCRIPTION_ID=''
    
    credentials = ServicePrincipalCredentials(client_id=AZURE_CLIENT_ID,secret=AZURE_CLIENT_SECRET,tenant=AZURE_TENANT_ID)
    
    resource_client = ResourceManagementClient(credentials, AZURE_SUBSCRIPTION_ID)
    compute_client = ComputeManagementClient(credentials,AZURE_SUBSCRIPTION_ID)
    network_client = NetworkManagementClient(credentials, AZURE_SUBSCRIPTION_ID)
    GROUP_NAME='allenR'
    LOCATION='eastus'
    # Network
    VNET_NAME = 'azure-sample-vnet'
    SUBNET_NAME = 'azure-sample-subnet'
    
    
    print('\nCreate Vnet')
    async_vnet_creation = network_client.virtual_networks.create_or_update(
            GROUP_NAME,
            VNET_NAME,
            {
                'location': LOCATION,
                'address_space': {
                    'address_prefixes': ['10.0.0.0/16']
                }
            }
        )
    async_vnet_creation.wait()
    
        # Create Subnet
    print('\nCreate Subnet')
    async_subnet_creation = network_client.subnets.create_or_update(
            GROUP_NAME,
            VNET_NAME,
            SUBNET_NAME,
            {'address_prefix': '10.0.0.0/24'}
        )
    subnet_info = async_subnet_creation.result()
    
        # Create NIC
    print('\nCreate NIC')
    async_nic_creation = network_client.network_interfaces.create_or_update(
            GROUP_NAME,
            'test19191',
            {
                'location': LOCATION,
                'ip_configurations': [{
                    'name': 'test19191-ip',
                    'subnet': {
                        'id': subnet_info.id
                    }
                }]
            }
        )
    nic = async_nic_creation.result()
    print(nic.id)
    vm_parameters = {
            'location': 'eastus',
            'os_profile': {
                'computer_name': 'jimtest120yue',
                'admin_username': 'jimtest',
                'admin_password': 'Password0123!',
                #'custom_data': startup_script
            },
            'hardware_profile': {
                'vm_size': 'Standard_B1ls'
            },
            'storage_profile': {
                'image_reference': {
                    'publisher': 'Canonical',
                    'offer': 'UbuntuServer',
                    'sku': '16.04.0-LTS',
                    'version': 'latest'
                },
                'os_disk': {
                    'caching': 'ReadWrite',
                    'name' : 'jimtest120yue_disk',
                    'create_option': 'FromImage',
                    'disk_size_gb': 30,
                    'os_type': 'Linux',
                    'managed_disk': {
                        'storage_account_type': 'Standard_LRS'
                    }
    
                }
            },
            'network_profile': {
                'network_interfaces': [{
                    'id': nic.id
                }]
            },
            'tags': {
                'expiration_date': 'expirationdatehere'
            }
        }
    
    
    async_vm_creation=compute_client.virtual_machines.create_or_update('allenR','jimtest120yue',vm_parameters)
    print(async_vm_creation.result())
    
    disk = compute_client.disks.get('allenR','jimtest120yue_disk')
    print(disk.sku)
    
    

    【讨论】:

      【解决方案2】:

      如果您使用 Rest API 创建 VM,那么这里是创建 VM 的示例 JSOn 请求:

      {
        "location": "westus",
        "properties": {
          "hardwareProfile": {
            "vmSize": "Standard_D1_v2"
          },
          "storageProfile": {
            "imageReference": {
              "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/{existing-custom-image-name}"
            },
            "osDisk": {
              "caching": "ReadWrite",
              "managedDisk": {
                "storageAccountType": "Standard_LRS"
              },
              "name": "myVMosdisk",
              "createOption": "FromImage"
            }
          },
          "osProfile": {
            "adminUsername": "{your-username}",
            "computerName": "myVM",
            "adminPassword": "{your-password}"
          },
          "networkProfile": {
            "networkInterfaces": [
              {
                "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/{existing-nic-name}",
                "properties": {
                  "primary": true
                }
              }
            ]
          }
        }
      }
      

      这是相同的 API:

      PUT https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2019-03-01
      

      如果您正在寻找一种创建虚拟机的方法,那么您可以按照以下代码示例进行操作:

      https://github.com/Azure-Samples/Hybrid-Compute-Python-Manage-VM/blob/master/example.py

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-13
        • 2020-08-16
        • 2017-12-31
        • 2019-07-03
        • 2017-11-14
        • 2019-02-02
        • 2018-03-28
        相关资源
        最近更新 更多