在 Google Cloud中更新资源时,您通常希望修改特定字段,而不是替换整个资源。Rust 版 Cloud 客户端库支持字段掩码,因此您可以指定更新操作要修改哪些字段,并让所有其他字段保持不变。
准备工作
本文档使用 Secret Manager API,但这些概念同样适用于其他 Google Cloud 服务。
在运行本文档中的代码之前,请先完成以下前提条件:
- 按照 Rust 使用入门中的说明设置开发环境。
- 按照使用 Secret Manager 创建和访问 Secret 中的说明启用 Secret Manager API 并配置身份验证。
依赖项
google-cloud-wkt crate 为 Google CloudAPI 提供了一些众所周知的类型,包括 FieldMask。将 google-cloud-secretmanager-v1、google-cloud-wkt、anyhow 和 tokio 添加到 Cargo.toml 文件中:
cargo add google-cloud-secretmanager-v1 google-cloud-wkt anyhow
cargo add tokio --features macros,rt-multi-thread
字段掩码的工作原理
FieldMask 包含一组符号字段路径,用于标识更新操作修改或读取操作返回的字段。
在更新操作中,服务仅更改掩码中列出的字段,并忽略请求消息中任何未列出字段的值。如果您在更新请求中省略了字段掩码,则该操作会应用于所有可变字段。
如需将特定字段重置为其默认值,请在掩码中包含字段路径,并将该字段保留在资源结构的默认值。
更新资源上的字段
如需创建 Secret 并使用 FieldMask 选择性地更新其 labels 和 annotations 字段,请完成以下步骤:
初始化
SecretManagerService客户端,并使用空的labels和annotations创建 Secret:发送
update_secret请求,设置labels、annotations、当前etag(以防止覆盖并发更新),以及涵盖"annotations"和"labels"的更新掩码:set_update_mask调用指定要修改的确切字段路径:
输出结果确认该操作更新了这两个字段:
labels: {"updated": "your-label"},
...
annotations: {"updated": "your-annotations"},
完整代码
以下函数结合了 Secret 创建和字段掩码更新:
清理
为避免系统向您的 Google Cloud 账号收取费用,并防止在后续运行中出现 ALREADY_EXISTS 错误,请在完成后删除 your-secret 密钥。