Клиент вычисления Azure Python SDK не использует параметры управляемого диска - PullRequest
0 голосов
/ 21 октября 2019

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

Ответы [ 2 ]

1 голос
/ 21 октября 2019

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

enter image description here enter image description here

0 голосов
/ 21 октября 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

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

...