在创建 Google 云平台部署后对其进行标记
Labeling a Google Cloud Platform Deployment after it has been created
我们有一个批处理标记器,可以处理 activity 新创建资源的日志,然后我们将标签应用于这些资源以进行计费。我们正在尝试以这种方式自动标记我们的部署,因为我们发现失败的部署正在累积并产生相当大的成本。我的问题是我无法标记部署。
我需要为部署添加一个全局标签,但我尝试以编程方式进行的所有操作似乎都不起作用。
我尝试像这样使用现有配置:
manifests = self.deploymentManagerService.manifests().list(project=project,
deployment=deployment_name).execute()
config = manifests['manifests'][0]['config']
...
content_dict = eval(json.dumps(json.loads(config['content'])))
output = StringIO.StringIO()
yaml.dump(content_dict, output, encoding=None)
body = {'labels': labels, 'fingerprint': fingerprint, 'name': deployment_name, 'target': {'config': { 'content': output.getvalue()}}}
print "BODY=", body
deploymentManagerService.deployments().patch(project=project,
deployment=deployment_name,
body=body).execute()
这正确地标记了部署,但由于路径问题在更新时出错。
我尝试了一个空的资源部分:
body = {'labels': labels, 'fingerprint': fingerprint, 'name': deployment_name, 'target': {'config': { 'content': 'resources:\n'}}}
这标记了部署但空白了配置(不好)。
我尝试没有配置或目标,结果是 400。我很茫然。
无需获取清单。使用 patch
是正确的想法,但是您需要添加一个 extra header。这是一个例子:
dep = self.deploymentManagerService.deployments().get(
deployment=deployment, project=project).execute()
body = {'labels': [{'key': 'foo', 'value': 'bar'}],
'fingerprint': dep['fingerprint']}
req = self.deploymentManagerService.deployments().patch(
project=project, deployment=deployment, body=body)
# This header is required for patch requests to work correctly.
req.headers['X-Cloud-DM-Patch'] = 'True'
res = req.execute()
此外,您可能希望:
- 如果存在并发修改(HTTP 409 冲突),则重试整个块。
- 考虑您希望如何处理现有标签(如果您的用例中可以有现有标签)。
- 有一个循环等待从
execute
返回的长 运行 操作完成。
我们有一个批处理标记器,可以处理 activity 新创建资源的日志,然后我们将标签应用于这些资源以进行计费。我们正在尝试以这种方式自动标记我们的部署,因为我们发现失败的部署正在累积并产生相当大的成本。我的问题是我无法标记部署。
我需要为部署添加一个全局标签,但我尝试以编程方式进行的所有操作似乎都不起作用。
我尝试像这样使用现有配置:
manifests = self.deploymentManagerService.manifests().list(project=project,
deployment=deployment_name).execute()
config = manifests['manifests'][0]['config']
...
content_dict = eval(json.dumps(json.loads(config['content'])))
output = StringIO.StringIO()
yaml.dump(content_dict, output, encoding=None)
body = {'labels': labels, 'fingerprint': fingerprint, 'name': deployment_name, 'target': {'config': { 'content': output.getvalue()}}}
print "BODY=", body
deploymentManagerService.deployments().patch(project=project,
deployment=deployment_name,
body=body).execute()
这正确地标记了部署,但由于路径问题在更新时出错。
我尝试了一个空的资源部分:
body = {'labels': labels, 'fingerprint': fingerprint, 'name': deployment_name, 'target': {'config': { 'content': 'resources:\n'}}}
这标记了部署但空白了配置(不好)。
我尝试没有配置或目标,结果是 400。我很茫然。
无需获取清单。使用 patch
是正确的想法,但是您需要添加一个 extra header。这是一个例子:
dep = self.deploymentManagerService.deployments().get(
deployment=deployment, project=project).execute()
body = {'labels': [{'key': 'foo', 'value': 'bar'}],
'fingerprint': dep['fingerprint']}
req = self.deploymentManagerService.deployments().patch(
project=project, deployment=deployment, body=body)
# This header is required for patch requests to work correctly.
req.headers['X-Cloud-DM-Patch'] = 'True'
res = req.execute()
此外,您可能希望:
- 如果存在并发修改(HTTP 409 冲突),则重试整个块。
- 考虑您希望如何处理现有标签(如果您的用例中可以有现有标签)。
- 有一个循环等待从
execute
返回的长 运行 操作完成。