1

삭제를 설정하려고, 나는 실행중인 인스턴스 내-INST 루트 영구 디스크 연결 PD-내-INST 명명했다. 파이썬 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에서 상세한입니다. 그런 다음 에 제공된 _blocking_call() 함수와 마찬가지로 응답의 ['status'] 필드가 'DONE' 일 때까지 zoneOperations().get() 메서드를 사용합니다. 내가 얻는 영역 작업 객체 (일부는 개인 정보 보호에 대한 회피) 다음이다 :

{ 
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'} 

나는 또한 setDiskAutoDelete() 방법에 대한 웹 기반의 API Explorer를 사용하여 요청을 보내려고 내가 똑같은 오류가 발생했습니다.

API 참조에서 요청한대로 디스크 장치 이름을 제공했기 때문에 왜 INVALID_FIELD_VALUE 오류가 발생하는지 이해할 수 없습니다. 이 분야에 대해 제가 빠진 것이 있습니까? 인스턴스 생성시 장치 이름이 주어진 이름과 다른가요?

도움 주셔서 감사합니다. :)

답변

1

장치 이름 필드는 VM 인스턴스 본 디스크 이름 (영구 디스크-0이 예)를 생성 할 때 영구 디스크에 부여 된 이름과 다른 (PD를 포함해야 -my-inst). 그것은 사용 입수해온 수

{ 
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']

장치 이름은 instances().get() 또는 instances().list() 방법으로 얻어진 JSON 인스턴스 오브젝트에