Создание пула в Azure с помощью Python SDK
Я пытаюсь создать пул на основе стандартного рыночного образа Ubuntu. Я использую Azure 4.0.0, ссылка на изображение, ссылка на конфигурацию VM и другие вещи написаны на основе docs.microsoft.com
Вот мой код:
import azure.batch as batch
from azure.batch import BatchServiceClient
from azure.batch.batch_auth import SharedKeyCredentials
from azure.batch import models
import sys
account = 'mybatch'
key = 'Acj1hh7vMR6DSodYgYEghjce7mHmfgfdgodYgYEghjce7mHmfgodYgYEghjce7mHmfgCj/7f3Zs1rHdfgPsdlA=='
batch_url = 'https://mybatch.westeurope.batch.azure.com'
creds = SharedKeyCredentials(account, key)
batch_client = BatchServiceClient(creds, base_url = batch_url)
pool_id = 'mypool3'
if batch_client.pool.exists( pool_id ):
print( 'pool exists' )
sys.exit()
vmc = models.VirtualMachineConfiguration(
image_reference = models.ImageReference(
offer = 'UbuntuServer',
publisher = 'Canonical',
sku = '16.04.0-LTS',
version = 'latest',
virtual_machine_image_id = None
) ,
node_agent_sku_id = 'batch.node.ubuntu 16.04'
)
pool_config = models.CloudServiceConfiguration(os_family = '5')
new_pool = models.PoolAddParameter(
id = pool_id,
vm_size = 'small',
cloud_service_configuration = pool_config,
target_dedicated_nodes = 1,
virtual_machine_configuration = vmc
)
batch_client.pool.add(new_pool)
Вот некоторые значения изображений, которые я взял с портала Azure (редактор JSON Add pool):
>
"imageReference": {
"Издатель": "Канонический",
"offer": "UbuntuServer",
"sku": "16.04.0-LTS"
},
Но когда я запускаю код, я получаю сообщение об ошибке:
Traceback (most recent call last):
File "a.py", line 80, in <module>
batch_client.pool.add(new_pool)
File "/root/miniconda/lib/python3.6/site-packages/azure/batch/operations/pool_operations.py", line 310, in add
raise models.BatchErrorException(self._deserialize, response)
azure.batch.models.batch_error_py3.BatchErrorException: {'additional_properties': {}, 'lang': 'en-US', 'value': 'The value provided for one of the properties in the request body is invalid.\nRequestId:d8a1f7fa-6f40-4e4e-8f41-7958egas6efa\nTime:2018-12-05T16:18:44.5453610Z'}
Какие значения изображения неверны? Можно ли получить дополнительную информацию об этой ошибке с RequestId?
ОБНОВИТЬ
Я нашел более новый пример, который использует этот помощник select_latest_verified_vm_image_with_node_agent_sku, чтобы получить ссылку на изображение. Та же ошибка The value provided for one of the properties in the request body is invalid.
2 ответа
Я думаю, что есть несколько запутанных примеров в сети, или они просто соответствуют более старой версии SDK.
Копаясь глубже в документах, я нашел это.
cloud_service_configuration CloudServiceConfiguration Конфигурация облачной службы для пула. Это свойство и virtualMachineConfiguration являются взаимоисключающими, и необходимо указать одно из свойств. Это свойство нельзя указать, если учетная запись пакетной службы была создана со свойством poolAllocationMode, установленным в "UserSubscription".
В моем случае я мог использовать толькоcloud_service_configuration = pool_config
или же virtual_machine_configuration = vmc
, но не оба одновременно.
Это рабочий код:
new_pool = models.PoolAddParameter(
id = pool_id,
vm_size = 'BASIC_A1',
target_dedicated_nodes = 1,
virtual_machine_configuration = vmc
)
Я сделал тест с вашим кодом и получил ту же ошибку. Затем я исследую и изменяю некоторые вещи в коде. И проблема вызвана двумя вещами.
Первый:
pool_config = models.CloudServiceConfiguration(os_family = '5')
Вы можете взглянуть на описание models.CloudServiceConfiguration
:
os_family: The Azure Guest OS family to be installed on the virtual
machines in the pool. Possible values are: 2 - OS Family 2, equivalent to
Windows Server 2008 R2 SP1. 3 - OS Family 3, equivalent to Windows Server
2012. 4 - OS Family 4, equivalent to Windows Server 2012 R2. 5 - OS Family
5, equivalent to Windows Server 2016. For more information, see Azure
Guest OS Releases
Может быть, это свойство установлено для окон. Вы можете забрать эту конфигурацию.
Второе:
vm_size = 'small',
Вы должны установить vmSize
с реальным размером виртуальной машины. Например, Standard_A1. См. Выбор размера виртуальной машины для вычислительных узлов в пакетном пуле Azure.
Надеюсь, что это поможет вам. Если вам нужна дополнительная помощь, пожалуйста, дайте мне сообщение.