设置和获取数据

本页面介绍了如何利用 Runtime Configurator 设置、获取和更新变量。变量是属于 RuntimeConfig 资源的键值对。每个键值对均包含您定义的数据。创建变量后,您可以设置其 watcherwaiter

如需详细了解变量和 Runtime Configurator 服务,请参阅 Runtime Configurator 基础知识文档。

如需了解如何创建 RuntimeConfig 资源,请参阅创建和删除 RuntimeConfig 资源

准备工作

创建变量

变量为键值对。变量键可以是平面的,也可以是分层的。例如,以下所有各项都是有效键:

  • status
  • users/jane-smith/favorite-color
  • users/total

只有叶节点键可以赋值。在以上示例中,您无法为以下项分配值:

  • users
  • users/jane-smith

这是因为这两个键下都包含其他键。

如需创建变量,请使用 Deployment Manager、gcloud 命令行工具或 API。

Deployment Manager

如需在 Deployment Manager 中创建变量,请指定变量类型:

runtimeconfig.v1beta1.variable

在变量的属性中,提供变量的 namelocationvalue

- name: [NAME]
  type: runtimeconfig.v1beta1.variable
  properties:
    parent: $(ref.[CONFIG_NAME].name)
    variable: [VARIABLE_KEY]
    [value | text]: [VARIABLE_VALUE]

其中:

  • [NAME] 是此变量的任意资源名称。这不是变量自身的名称。
  • [CONFIG_NAME] 是此请求的配置资源。
  • [VARIABLE_KEY] 是此变量的键。例如,statususers/jane-smith/favorite_color 是有效的键。变量键可以包含 /。变量键可以包含数字、字母、短划线和斜线,名称的最大长度为 256 个字符。
  • [VARIABLE_VALUE] 是此变量的值。根据您是要将值指定为明文还是以 based64 编码的字符串,请选择 valuetext 属性:
    • value:如果要将值指定为以 base64 编码的字符串,请使用 value 属性。
    • text:如果要提供明文字符串,请使用 text 属性。 该字符串必须是有效的 UTF-8。

gcloud

如需在 gcloud 命令行工具中创建变量,请使用 runtime-config configs variables set 命令:

gcloud beta runtime-config configs variables set [VARIABLE_KEY] \
    [VARIABLE_VALUE] --config-name [CONFIG_NAME] [--is-text]

其中:

  • [VARIABLE_KEY] 是此变量的键,例如,statususers/jane-smith/favorite_color 是有效的键。变量键可以包含 /。变量键可以包含数字、字母、短划线和斜线,名称的最大长度为 256 个字符。
  • [VARIABLE_VALUE] 是此变量的值。您可以将值指定为明文或以 base64 编码的字符串。如果指定明文值,请提供 --is-text 标志;否则,gcloud 命令行工具将对值进行 base64 编码。

    gcloud beta runtime-config configs variables set [VARIABLE_KEY] \
          [VARIABLE_VALUE] --config-name [CONFIG_NAME] --is-text
    

    您还可以通过文件提供变量值。例如:

    cat [FILE_NAME] | gcloud beta runtime-config configs variables set [VARIABLE_KEY] --config-name [CONFIG_NAME]
    

    注意:您不需要对此值进行编码,因为 gcloud 将为您进行编码。

  • [CONFIG_NAME] 是应在其中创建此变量的 RuntimeConfig 资源的名称,例如 frontend-config

    例如:

    gcloud beta runtime-config configs variables set example-variable \
          my-test-value --config-name example-config
    

    gcloud 工具会返回如下响应:

Created [https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_KEY]].

默认情况下,任何现有变量将会被静默覆盖。如果要保留已存在的变量,请添加 --fail-if-present 标志,这会在变量不存在时才新建一个。

同样,您也可以通过提供 --fail-if-absent 标志来使缺失变量的请求失败。

如需查看此 gcloud 命令的完整参考,请阅读 runtime-config variables set 参考文档。

API

在 REST API 中,向以下 URI 发送 POST 请求以创建新变量:

https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables

其中,[PROJECT_ID] 是此请求的项目 ID。请求载荷包含指向 RuntimeConfig 资源的 URI 以及密钥的明文值或以 base64 编码的值:

{
   "name": "projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_KEY]"
   "[value | text]": "[VARIABLE_VALUE]" # Choose either 'value' or 'text' but not both
}

其中:

  • [PROJECT_ID] 是此请求的项目 ID。
  • [CONFIG_NAME] 是此配置的名称。
  • [VARIABLE_KEY] 是此变量的键,例如 statususers/jane-smith/favorite_color。变量键可以包含 /。变量键可以包含数字、字母、短划线和斜线,名称的最大长度为 256 个字符。
  • [VARIABLE_VALUE] 是此变量的值。根据您是要将值指定为明文还是以 based64 编码的字符串,请选择 valuetext 属性:

    • value:如果要将值指定为以 base64 编码的字符串,请使用 value 属性。
    • text:如果要提供明文字符串,请使用 text 属性。 该字符串必须是有效的 UTF-8。

    如果成功,API 会返回如下响应:

    {
    "name": "projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_KEY]",
    "value": "dGVhbA==",
    "updateTime": "2016-04-11T21:49:00.773366134Z"
    }

    如需详细了解该方法,请阅读 variables().create 文档。

更新变量

Deployment Manager

要在 Deployment Manager 中更新变量:

  1. 按照创建变量中所述定义或更新变量属性。

  2. 按照这些步骤发送更新请求

gcloud

利用相同过程更新变量以创建变量

API

在 REST API 中,向以下 URI 发送 PUT 请求以更新变量:

https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_KEY]

其中:

  • [PROJECT_ID] 是此请求的项目 ID。
  • [CONFIG_NAME] 是此配置的名称。
  • [VARIABLE_VALUE] 是此变量的值。这是以 base64 编码的字符串。

请求的载荷必须是:

{
   "[value | text]": "[VARIABLE_VALUE]" # Choose either 'value' or 'text' but not both
}

其中,[VARIABLE_VALUE] 是此变量的值。根据您是要将值指定为明文还是以 based64 编码的字符串,请选择 valuetext 属性:

  • value:如果要将值指定为以 base64 编码的字符串,请使用 value 属性。
  • text:如果要提供明文字符串,请使用 text 属性。该字符串必须是有效的 UTF-8。

如果成功,API 会返回如下响应:

{
  "name": "projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_KEY]",
  "value": "dGVhbA==",
  "updateTime": "2016-04-11T21:46:11.591713370Z",
  "state": "UPDATED"
}

如需详细了解该方法,请阅读 variables().create 文档。

获取变量值

Deployment Manager

使用以下方法之一获取变量值:

gcloud

如需在 gcloud 命令行工具中创建变量,请使用 runtime-config configs variables get-value 命令:

gcloud beta runtime-config configs variables get-value [VARIABLE_KEY] --config-name [CONFIG_NAME]

其中:

  • [VARIABLE_KEY] 是此变量的键,例如 statususers/jane-smith/favorite_color
  • [CONFIG_NAME] 是此变量的 RuntimeConfig 资源的名称,例如 website

    gcloud 工具会返回如下响应:

    example-value

通过使用 list 并提供 --values 标志,您还可以获取自己拥有 runtimeconfig.variables.get 权限的变量及其值的列表。例如:

gcloud beta runtime-config configs variables list --config-name example-config --values

gcloud 工具会返回如下列表:

NAME                         UPDATE_TIME                     VALUE
not-my-favorite-color/shade  2016-04-18T21:14:59.932428461Z  orange
not-my-favorite-food/group   2016-04-18T21:14:59.932428461Z  vegetables

您没有 get 权限的变量都不包含在内。这包括您拥有 list 权限但没有 get 权限的变量。

如需查看此 gcloud 命令的完整参考,请阅读 runtime-config variables 参考文档。

API

在 REST API 中,向以下 URI 发送 GET 请求以获取变量的值:

https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_KEY]

其中:

  • [PROJECT_ID] 是此请求的项目 ID。
  • [CONFIG_NAME] 是此配置的名称。
  • [VARIABLE_KEY] 是此请求的名称。

如果请求成功,API 返回的响应将带有以 base64 编码的变量值:

{
  "name": "projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_KEY]",
  "value": "[VARIABLE_VALUE]",
  "updateTime": "2016-04-11T21:49:00.773366134Z"
}

您必须自行对该值进行解码,才能获取该字符串。如需详细了解该方法,请阅读 variables().get 文档。

如果您希望获取自己拥有 runtimeconfig.variables.get 权限的变量及其值的列表,请使用 returnValues 方法。例如:

GET uri: https://runtimeconfig.googleapis.com/v1beta1/projects/myproject/configs/example-config/variables?returnValues=True

API 会返回您拥有权限的所有变量:

{
  "variables": [
    {
      "name": "projects/compute-writers-project/configs/example-config/variables/not-my-favorite-color/shade",
      "updateTime": "2016-04-18T21:14:59.932428461Z",
      "value": "b3Jhbmdl"
    }
  ]
}

同样,您必须自行对该值进行解码,才能获取该字符串。

如需详细了解该方法,请阅读 variables().list 文档。

后续步骤