2

我一直在尝试Google 的 Deployment Manager GitHub 项目中提供的这个示例。

它可以工作,但我不确定创建三个instances名为instance_createinstance_update的目的是什么instance_delete

例如,取自链接:

instance_create = {
      'name':
          'instance_create',
      'action':
          'gcp-types/bigtableadmin-v2:bigtableadmin.projects.instances.create',
      'properties': {
          'parent': project_path,
          'instanceId': instance_name,
          'clusters': copy.deepcopy(initial_cluster),
          'instance': context.properties['instance']
      },
      'metadata': {
          'runtimePolicy': ['CREATE']
      }
}
`action` 和 `metadata`.`runtimePolicy` 的目的是什么?我试图在文档中找到它,但失败了。为什么那里有三个 `BigTable` 实例?
4

1 回答 1

1

你是对的,文档缺少信息,这将回答你关于这些参数的问题。

但是,它有助于了解您链接的 Depoyment Manager 示例中发生了什么。

首先,config.yaml 中的以下行是事情变得棘手的地方:

resources:
- name: my-bigtable
  type: bigtable.py

这一行将调用bigtable.pypython 文件,该文件将部署的资源类型设置为GenerateConfig函数下的资源类型。看看这里是如何做到

资源{'resources': resources}在其末尾返回,资源变量是在那里创建的模板列表。

这些模板具有不同的名称标识符,由"name"标签设置。因此,您不是在此文件中创建三个不同的实例,名称为instance_create, instance_updateinstance_delete而是创建三个具有这些名称的模板,这些模板稍后将附加到resources列表中,然后返回到 config.yamlresources.type标记。一旦使用 create 命令,这些模板将由部署管理器按顺序构建和执行。请注意,它们可能出现乱序,这是由于没有使用 schema

以文件格式更容易查看此结构.yaml,例如,使用 构建jinja,您发布的模板将是:

resources:
- action: gcp-types/bigtableadmin-v2:bigtableadmin.projects.instances.create
  name: instance_create
  metadata:
    runtimePolicy:
    - CREATE
  properties:
    clusters:
      initial:
        defaultStorageType: HDD
        location: projects/<PROJECT_ID>/locations/<PROJECT_LOCATION>
        serveNodes: 4
    instance:
      displayName: My BigTable Instance.
      type: PRODUCTION
    instanceId: my-instance
    parent: projects/<PROJECT_ID>

请注意,下面的参数properties到 bigtableadmin.projects.instances.create 的请求正文中的字段(其中嵌套了 集群对象参数实例对象参数)。请注意,属性下的 InstanceId 始终相同,因此模板执行调用的 BigTable 实例始终相同。

问题是,不仅您链接的示例创建了要在同一脚本中运行的各种模板,而且每个模板的资源类型都是对 BigTable API 的调用

通常模板资源是用type标签指定的,但由于您调用的是直接运行 API 调用的资源(即,而不是仅指定gcp-types/bigtableadmin-v2,您正在指定bigtableadmin-v2:bigtableadmin.projects.instances.create),因此action使用了标签。我在任何地方都没有发现这种用法差异,但需要这样指定。如果资源以 create/update/delete 结尾,您将知道是否直接调用 API“端点”。

最后,我在我身边进行了调查,metadata.runtimePolicy这与资源类型是 API 调用这一事实相关(如前一点)。再一次,我还没有在任何地方找到这个记录。但是,由于这是一项要求,因此您始终必须在此字段中设置正确的值。它基本上归结为已metadata.runtimePolicy设置为此值,具体取决于您执行的 API 调用类型:

create -> ['CREATE']

update -> ['UPDATE_ON_CHANGE']

delete -> ['DELETE']

总结

  • 您创建的不是三个不同的实例,而是三个不同的模板,它们在同一个 BigTable 实例上工作。
  • 如果您正在调用 API 端点(创建/更新/删除),则需要将资源type标志更改为,而不仅仅是命名基本 API。action
  • metadata.runtimePolicy值是调用上述端点之一时的要求。
于 2019-01-10T14:12:07.520 回答