首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BigTable示例

BigTable示例
EN

Stack Overflow用户
提问于 2019-01-10 09:32:03
回答 1查看 231关注 0票数 2

我一直在尝试谷歌的Deployment项目中提供的示例。

它可以工作,但我不确定创建三个instances instance_createinstance_updateinstance_delete的目的是什么。

例如,摘自链接:

代码语言:javascript
复制
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']
      }
}

actionmetadata.runtimePolicy的目的是什么?我试图在文件中找到它,但不幸地失败了。为什么有三个BigTable实例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-10 14:12:07

您说得对,文档缺少这些信息,这将回答您有关这些参数的问题。

但是,它有助于了解您所链接的“撤职经理”示例中发生了什么。

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

代码语言:javascript
复制
resources:
- name: my-bigtable
  type: bigtable.py

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

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

这些模板具有不同的名称标识符,这些标识符由"name"标记设置。因此,您没有在此文件中创建三个名称为instance_createinstance_updateinstance_delete的不同实例,但您正在创建三个具有这些名称的模板,这些模板稍后将被附加到resources列表中,然后返回到config.yaml resources.type标记。然后,一旦使用create命令,部署管理器将依次构建和执行这些模板。请注意,它们可能出现故障,这是到期的不使用架构

.yaml文件格式查看此结构比较容易,例如,使用jinja构建的模板如下:

代码语言:javascript
复制
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‘端点’。

最后,I已经在我这边进行了研究,metadata.runtimePolicy与资源类型是一个API调用这一事实联系在一起(与前一点一样)。再说一次,我在任何地方都没有找到这份文件。但是,由于这是一个要求,因此您必须始终在此字段中设置正确的值。它基本上可以归结为将metadata.runtimePolicy设置为这个值,这取决于您所做的API调用的类型:

create -> ['CREATE']

update -> ['UPDATE_ON_CHANGE']

delete -> ['DELETE']

综述

  • 您创建的不是三个不同的实例,而是三个不同的模板,它们在同一个BigTable实例上完成工作。
  • 如果要调用API端点(create/update/delete),则需要将资源type标志更改为action,而不仅仅是命名基本API。
  • 在调用其中一个已命名端点时,metadata.runtimePolicy值是必需的。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54125617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档