Исключение BatchErrorException: указанная операция недопустима для текущего состояния ресурса

#azure #azure-batch

#azure #azure-batch

Вопрос:

Сценарий: у меня есть задание, созданное в azure batch для пула. Теперь я создал другой пул и хочу указать свою работу на вновь созданный пул. Я использую azure-batch SDK для написания следующего фрагмента кода

 import azure.batch.batch_service_client as batch
batch_service_client = batch.BatchServiceClient(credentials, batch_url = account_url)

job_id="LinuxTrainingJob"
pool_id="linux-e6a63ad4-9e52-4b9a-8b09-2a0249802981"

pool_info = batch.models.PoolInformation(pool_id=pool_id)
job_patch_param = batch.models.JobPatchParameter(pool_info=pool_info)
batch_service_client.job.patch(job_id, job_patch_param)
  

Это выдает следующую ошибку

 BatchErrorException                       Traceback (most recent call last)
<ipython-input-104-ada32b24d6a0> in <module>
      2 pool_info = batch.models.PoolInformation(pool_id=pool_id)
      3 job_patch_param = batch.models.JobPatchParameter(pool_info=pool_info)
----> 4 batch_service_client.job.patch(job_id, job_patch_param)

~/anaconda3/lib/python3.8/site-packages/azure/batch/operations/job_operations.py in patch(self, job_id, job_patch_parameter, job_patch_options, custom_headers, raw, **operation_config)
    452 
    453         if response.status_code not in [200]:
--> 454             raise models.BatchErrorException(self._deserialize, response)
    455 
    456         if raw:

BatchErrorException: {'additional_properties': {}, 'lang': 'en-US', 'value': 'The specified operation is not valid for the current state of the resource.nRequestId:46074112-9a99-4569-a078-30a7f4ad2b91nTime:2020-10-06T17:52:43.6924378Z'}
  

Учетные данные указаны выше и работают должным образом, поскольку я смог создать пул и задания, используя один и тот же клиент.

Сведения об окружающей среде

 azure-batch==9.0.0
python 3.8.3
Ubuntu 18.04
  

Ответ №1:

Чтобы назначить задание другому пулу, необходимо вызвать API disableJob для удаления текущих задач из пула. Затем вы можете вызвать updateJob, чтобы назначить новый идентификатор пула для запуска. После ее обновления вы можете вызвать enableJob для продолжения выполнения заданий.