Вычислительный клиент пакета SDK для Azure Python не использует параметры управляемого диска

Я использую вычислительный клиент для создания виртуальной машины (с помощью create_or_update), и я хочу, чтобы виртуальная машина имела стандартный жесткий диск, а не премиум-диск в качестве диска ОС. Я должен иметь возможность указать это в параметрах управляемого диска, но когда я это сделаю, виртуальная машина по-прежнему будет создавать с премиальным 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?


person Michael Wang    schedule 21.10.2019    source источник


Ответы (2)


Согласно моему тесту, вы используете неправильный параметр в 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)

введите здесь описание изображения  введите описание изображения здесь

person Jim Xu    schedule 21.10.2019

Если вы используете Rest API для создания виртуальной машины, то вот пример запроса 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

Надеюсь, это поможет.

person Mohit Verma    schedule 21.10.2019