GCP Python - 删除项目标签

mot*_*ail 5 python google-cloud-platform

我正在尝试使用 UpdateProjectRequest 从项目中删除标签。

它说它需要一个“update_mask”,但我不知道如何创建这个掩码。它是 google.protobuf.field_mask_pb2.FieldMask

https://cloud.google.com/python/docs/reference/cloudresourcemanager/latest/google.cloud.resourcemanager_v3.types.UpdateProjectRequest

我尝试过的是:

from google.cloud import resourcemanager_v3
from google.protobuf import field_mask_pb2

def sample_update_project(project_id):
    client = resourcemanager_v3.ProjectsClient()

    
    update_mask = field_mask_pb2.FieldMask(paths=["labels.newkey:None"])
    resourcemanager_v3.Project=f"projects/{project_id}"
    
    operation = client.update_project(update_mask=update_mask)
    
    
    print("Waiting for operation to complete...")
    response = operation.result()
    
    
    print(response)
Run Code Online (Sandbox Code Playgroud)

谢谢

Jos*_*hez 1

正如您已经提到的,当您想要删除所有标签时,需要对标签字段进行更新掩码。查看本文档,请注意,如果提供了请求,则不应设置该请求。此外,您还会找到一个可能对您有帮助的代码示例。

此外,filed_mask_pb2如果您要使用FieldMask 更新数据,则应该导入,如下所示:

from google.protobuf import field_mask_pb2
Run Code Online (Sandbox Code Playgroud)

考虑到主要问题,可以使用以下两种方法之一来删除标签

使用读取-修改-写入模式完全删除标签,这会同时删除键和值。为此,请执行以下步骤:

  • 使用资源的 get() 函数读取当前标签。
  • 使用文本编辑器或以编程方式更改返回的标签以添加或删除任何必要的键及其值。
  • 对资源调用 patch() 函数以写入更改的标签。

要保留密钥并删除值,请将值设置为null,但检查您的代码,您当前正在使用None

另外,请考虑以下文档:创建和管理标签方法:projects.patch

更新

再次处理您的主要问题,这是一个已经过测试的代码,可以根据您的要求删除标签:

import googleapiclient.discovery 

def sample_update_project_old(project_id): 
    manager = googleapiclient.discovery.build('cloudresourcemanager', 'v1') 
    request = manager.projects().get(projectId=project_id) 
    project = request.execute() 
    del project['labels']['key'] # replace 'key' with your actual key value 
    request = manager.projects().update(projectId=project_id, body=project) 
    project = request.execute() 

sample_update_project_old("your-project-id")
Run Code Online (Sandbox Code Playgroud)