BatchErrorException:指定的操作对于资源的当前状态无效

问题描述

场景我有一个针对泳池的天蓝色批次创建的作业。现在,我创建了另一个池,并希望将我的工作指向新创建的池。 我使用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.Pool@R_794_4045@ion(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.Pool@R_794_4045@ion(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-30a7f4ad2b91\nTime:2020-10-06T17:52:43.6924378Z'}

凭据已在上面设置并且可以正常使用,因为我能够使用同一客户端创建池和作业。

环境详细信息

azure-batch==9.0.0
python 3.8.3
Ubuntu 18.04

解决方法

要将作业分配给另一个池,必须调用disableJob API以从池中耗尽当前正在运行的任务。然后,您可以调用updateJob来分配要运行的新poolId。更新后,您可以致电enableJob继续执行作业。