字段'磁盘的值无效'尝试设置磁盘自动删除选项时

时间:2014-10-07 15:31:14

标签: google-api google-compute-engine google-api-python-client

在Google Compute Engine上,我有一个名为 my-inst 的正在运行的实例,并附带了根持久性磁盘 pd-my-inst 。我想使用Python API客户端将磁盘的AutoDelete选项设置为False。我知道我可以在实例创建时或使用gcloud compute工具设置此选项,但我的应用程序需要能够在使用Python API创建实例后设置它。我用来发送请求的代码是:

request = gce_service.instances().setDiskAutoDelete(autoDelete=False,
    deviceName='pd-my-inst', project=PROJECT_ID, instance='my-inst', zone=DEFAULT_ZONE)
response = gce_service.execute(http=http_auth)

我得到的回复详见API Reference,因此已正确发送。然后,我使用zoneOperations().get()方法,直到回复的['status']字段为'DONE',类似于Google Compute API Python Guide中提供的_blocking_call()函数。然后我得到的区域操作对象(隐私的某些部分被忽略):

{
u'status': u'DONE',
u'kind': u'compute#operation',
u'name': u'operation-1412647209801-504cb8f221529-...',
u'zone': u'https://www.googleapis.com/compute/v1/projects/MY-PROJECT-NAME/zones/us-central1-a',
u'startTime': u'2014-10-06T19:00:10.094-07:00',
u'httpErrorMessage': u'BAD REQUEST',
u'insertTime': u'2014-10-06T19:00:09.908-07:00',
u'targetId': u'1543069760...',
u'targetLink': u'https://www.googleapis.com/compute/v1/projects/MY-PROJECT-NAME/zones/us-central1-a/instances/my-inst',
u'operationType': u'setDiskAutoDelete',
u'error':
    {
    u'errors':
        [{
        u'message': u"Invalid value for field 'disk': 'pd-my-inst'. ",
        u'code': u'INVALID_FIELD_VALUE'
        }]
    },
u'progress': 100,
u'endTime': u'2014-10-06T19:00:10.464-07:00',
u'httpErrorStatusCode': 400,
u'id': u'998580128...',
u'selfLink': u'https://www.googleapis.com/compute/v1/projects/MY-PROJECT-NAME/zones/us-central1-a/operations/operation-1412647209801-504cb8f221529-...',
u'user': u'MY_USERNAME'}

我还尝试使用基于Web的API Explorer为setDiskAutoDelete()方法发送请求,我得到了完全相同的错误。

我不明白为什么会收到INVALID_FIELD_VALUE错误,因为我提供了API Reference所要求的磁盘设备名称。我对这个领域缺少什么?设备名称是否与实例创建时为其指定的名称不同?

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

DeviceName字段应包含VM实例看到的磁盘名称(本示例中为 persistent-disk-0 ),这与创建永久磁盘时给出的名称不同( PD-我-INST )。 DeviceName位于使用instances().get()instances().list()方法获取的json实例对象中:

{
u'status': u'RUNNING',
u'kind': u'compute#instance',
u'machineType': ...
u'name': u'my-inst',
u'zone': u'https://www.googleapis.com/compute/v1/projects/MY-PROJECT-NAME/zones/us-central1-a',
u'tags': {u'fingerprint': u'42WmSpB8rSM='},
u'disks':
    [{
    u'deviceName': u'persistent-disk-0',
    u'kind': u'compute#attachedDisk',
    u'autoDelete': True,
    u'index': 0,
    u'boot': True,
    u'source': u'https://www.googleapis.com/compute/v1/projects/MY-PROJECT-NAME/zones/us-central1-a/disks/pd-my-inst',
    u'type': u'PERSISTENT'
    }],
u'scheduling': {u'automaticRestart': True, u'onHostMaintenance': u'MIGRATE'},
u'canIpForward': False,
...
}

可以使用:instance['disks'][DISK_INDEX]['deviceName']

进行检索