Google api 正在从停止的实例中分离磁盘

Google api 正在从停止的实例中分离磁盘,google-api,google-compute-engine,google-api-python-client,Google Api,Google Compute Engine,Google Api Python Client,我正在尝试从当前保存磁盘的已停止实例中分离磁盘。以下是我目前的做法 def detach_disk_from_instance(disk_name, zone=GCLOUD_ZONE): disk_info = get_disk_info(disk_name=disk_name, zone=zone) if disk_info.get('users'): instance_name = disk_info['users'][0].rsplit('/').pop()

我正在尝试从当前保存磁盘的已停止实例中分离磁盘。以下是我目前的做法

def detach_disk_from_instance(disk_name, zone=GCLOUD_ZONE):
    disk_info = get_disk_info(disk_name=disk_name, zone=zone)
    if disk_info.get('users'):
        instance_name = disk_info['users'][0].rsplit('/').pop()
        logger.info("detatching disk : {} from instance : {}".format(disk_name, instance_name))
        request = compute.instances().detachDisk(
            project=GCLOUD_PROJECT_NAME, zone=zone, instance=instance_name, deviceName=disk_name)
        return make_http_request(request, {})

def wait_for_operation(operation, zone=GCLOUD_ZONE, worker=1):
    logger.info('Waiting for operation {} to finish...'.format(operation))
    with ThreadPoolExecutor(worker) as executor:
        future = executor.submit(_check_operation_status, operation=operation, zone=zone)
        wait([future])
        return future.result()

req = detach_disk_from_instance(disk_name='test-disk')
wait_for_operation(operation=req['name'])
如果保存磁盘的实例当前正在运行,则上述代码有效。 但如果实例停止,它就不起作用。当我尝试从停止的实例分离磁盘时,出现以下错误

{'errors':[{'message':找不到具有设备名称的连接磁盘 '测试磁盘','代码':'无效的使用'}]}

我向您保证,磁盘仍然连接到实例,gcp仪表板也显示了这一点。

TL;DR-您传递的是磁盘资源的名称,而不是磁盘连接到实例的设备名称

在将磁盘附加到VM实例的请求中,可以在请求字段中指定设备名称

设备名称

指定您选择的唯一设备名称,该名称 反映到Linux的/dev/disk/by id/google-*树中 实例中运行的操作系统。此名称可用于 从内部参照设备进行安装、调整大小等 实例

如果未指定,服务器将选择要应用的默认设备名称 此磁盘的格式为persistent-disks-x,其中x是一个数字 由谷歌计算引擎分配。此字段仅适用于 持久磁盘

您需要将此名称用作请求的deviceName查询参数

必需的查询参数

设备名称

要分离的磁盘设备名称

如文档中所述,如果在连接磁盘时未指定设备名称,GCE将以persistent-disks-x的形式生成设备名称,您必须指定此名称