instances.setMetadata() - 没有任何变化
instances.setMetadata() - nothing changes
我正在尝试为现有机器添加启动脚本,当我从 Google 的测试器 ('Try this 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 格式有关?也许请求正文需要编码或什么的?
将不胜感激任何帮助!
提前致谢。
选项 1
setMetadata 调用可能失败。查看云控制台日志以了解操作结果。
选项 2
setMetadata
不会立即应用更改,可能需要一点时间。因为您的代码会立即获取实例,所以 setMetadata
更改可能会在您获取实例后应用。
如果您的脚本需要检查更改是否已应用,它应该获取操作对象,直到它不再是 RUNNING
。
已解决。给它 'Owner' 权限,它起作用了。
意味着我有错误的权限。
感谢大家!
我正在尝试为现有机器添加启动脚本,当我从 Google 的测试器 ('Try this 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 格式有关?也许请求正文需要编码或什么的? 将不胜感激任何帮助! 提前致谢。
选项 1
setMetadata 调用可能失败。查看云控制台日志以了解操作结果。
选项 2
setMetadata
不会立即应用更改,可能需要一点时间。因为您的代码会立即获取实例,所以 setMetadata
更改可能会在您获取实例后应用。
如果您的脚本需要检查更改是否已应用,它应该获取操作对象,直到它不再是 RUNNING
。
已解决。给它 'Owner' 权限,它起作用了。 意味着我有错误的权限。 感谢大家!