instances.setMetadata () - ничего не меняется - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь добавить скрипт запуска для существующей машины, когда я делаю это из тестера Google («Попробуйте этот API»), он работает, с клиентом кажется, что ничего не меняется ... Вот код (просто пример запроса) + ответ, который я получаю (выглядит нормально) и данные машины после отправки запроса.

Мой запрос:

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
from pprint import pprint
jsonPath = "myJSON.json"

credentials = GoogleCredentials.from_stream(jsonPath)
# Define gcp service
service = discovery.build('compute', 'v1', credentials=credentials)

#Request Body
bodyData = {"fingerprint": "***","items": [{"key": "startup-script","value": "#! /bin/bash\n\nservice start sshguard"}]}
#setMeta Data Request
instance = service.instances().setMetadata(project="<PROJECT>", zone="europe-west1-b", instance="<ID>", body=bodyData)
#Execute request
response = instance.execute()
# Get instacne details
instanceget = service.instances().get(project="<PROJECT>", zone="europe-west1-b", instance="<ID>").execute()

#Print response + New Metadata
pprint(response)
print("'New Metadata:", instanceget['metadata'])

Ответ, который я получаю

{'id': '6099825023953066427',
 'insertTime': '2020-03-16T04:47:32.880-07:00',
 'kind': 'compute#operation',
 'name': 'operation-84359252330-5a0f7626e861e-cf743913-4f05cd',
 'operationType': 'setMetadata',
 'progress': 0,
 'selfLink': 'https://www.googleapis.com/compute/v1/projects/<Project>/zones/europe-west1-b/operations/operation-1584359252330-5a0f7626e861e-cf743913-4f05cd31',
 'startTime': '2020-03-16T04:47:32.899-07:00',
 'status': 'RUNNING',
 'targetId': '<ID>',
 'targetLink': 'https://www.googleapis.com/compute/v1/projects/<Project>/zones/europe-west1-b/instances/<ID>',
 'user': 'pubsub-aws@<Project>.iam.gserviceaccount.com',
 'zone': 'https://www.googleapis.com/compute/v1/projects/<Project>/zones/europe-west1-b'}
'New Metadata:  {'fingerprint': '***', 'kind': 'compute#metadata'}

Как видите, скрипт запуска никогда не добавлялся в метаданные ... Я подумал, что это что-то с форматом json? может быть, тело запроса должно быть закодировано или что-то? Буду признателен за любую помощь! Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

решаемая. Дали ему разрешения «Владелец», и это сработало. Означает, что у меня были неправильные разрешения. Спасибо всем!

0 голосов
/ 18 марта 2020

Опция 1

Возможно, вызов setMetadata не выполнен. Посмотрите в журналах консоли Cloud, чтобы увидеть, каков результат операции.

Опция 2

setMetadata не сразу применяет изменение, это может занять некоторое время. Поскольку ваш код немедленно извлекает экземпляр, изменение setMetadata может применяться после его извлечения.

Если вашему сценарию необходимо проверить, применено ли изменение, он должен извлекать объект операции до тех пор, пока он не перестанет RUNNING.

...