0

我正在使用计算客户端创建一个 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 不会改变任何内容。我应该怎么做才能让我的虚拟机使用标准硬盘而不是高级 ssd 作为其 os 磁盘创建?

4

2 回答 2

0

如果您使用 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

希望能帮助到你。

于 2019-10-21T08:15:38.297 回答
0

根据我的测试,您在vm_parameters. 请更新managed_disk_parametersmanaged_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)

在此处输入图像描述 在此处输入图像描述

于 2019-10-21T08:10:52.373 回答