Google 部署管理器 - BigTable 示例
Google Deployment Manager - BigTable example
我一直在尝试 Google 的部署管理器 GitHub 项目中提供的 this 示例。
有效,但我不确定创建三个名为 instance_create
、instance_update
和 instance_delete
.
的 instances
的目的是什么
例如,取自 link:
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”实例?
你是对的,文档缺少可以回答你关于这些参数的问题的信息。
但是,它有助于了解您链接的 Depoyment Manager 示例中发生的情况。
首先,config.yaml 中的以下行是事情变得棘手的地方:
resources:
- name: my-bigtable
type: bigtable.py
此行将调用 bigtable.py
python 文件,该文件在 GenerateConfig
函数下将部署的资源类型设置为其中的资源类型。看看这是怎么做到的 here.
资源在其末尾返回为 {'resources': resources}
,作为资源变量,其中创建了 templates 列表。
这些模板有不同的名称标识,由"name"
标签设置。
因此,您不是在该文件中创建名称为 instance_create
、instance_update
和 instance_delete
的三个不同实例,而是创建三个具有这些名称的模板,稍后将附加到resources
列表,后来返回到config.yamlresources.type
标签。
一旦使用创建命令,部署管理器就会依次构建和执行这些模板。请注意,它们可能会出现乱序,这是由于 not using a 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
下的参数是 fields in the request body to bigtableadmin.projects.instances.create (which is nesting a clusters object parameters and a instance object parameters)。请注意,属性下的 InstanceId 始终相同,因此模板执行调用的 BigTable 实例始终相同。
事实是,不仅您链接的示例在同一个脚本中创建了各种模板 运行,而且每个模板的资源类型 is a call to the BigTable API。
通常模板资源是用 type
标签指定的,但由于您调用的资源直接 运行 调用了 API(即不仅仅是指定 gcp-types/bigtableadmin-v2
,您指定的是 bigtableadmin-v2:bigtableadmin.projects.instances.create
),使用了 action
标签。我没有在任何地方发现这种用法上的差异,但需要这样指定。
如果资源以 create/update/delete.
结尾,您将知道是否直接调用 API 'endpoint'
最后,我在我这边进行了调查,metadata.runtimePolicy
与资源类型是 API 调用这一事实有关(如前一点)。再一次,我没有在任何地方找到这个记录。
但是,由于这是一项要求,因此您必须始终在此字段中设置正确的值。它基本上归结为将 metadata.runtimePolicy
设置为此值,具体取决于您调用的 API 类型:
create -> ['CREATE']
update -> ['UPDATE_ON_CHANGE']
delete -> ['DELETE']
总结:
- 您不是在创建三个不同的实例,而是在同一个 BigTable 实例上执行工作的三个不同的模板。
- 如果您正在调用 API 端点 (create/update/delete),您需要将资源
type
标志更改为 action
,而不是仅仅命名基础 API.
- 调用上述端点之一时,
metadata.runtimePolicy
值是必需的。
我一直在尝试 Google 的部署管理器 GitHub 项目中提供的 this 示例。
有效,但我不确定创建三个名为 instance_create
、instance_update
和 instance_delete
.
instances
的目的是什么
例如,取自 link:
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”实例?
你是对的,文档缺少可以回答你关于这些参数的问题的信息。
但是,它有助于了解您链接的 Depoyment Manager 示例中发生的情况。
首先,config.yaml 中的以下行是事情变得棘手的地方:
resources:
- name: my-bigtable
type: bigtable.py
此行将调用 bigtable.py
python 文件,该文件在 GenerateConfig
函数下将部署的资源类型设置为其中的资源类型。看看这是怎么做到的 here.
资源在其末尾返回为 {'resources': resources}
,作为资源变量,其中创建了 templates 列表。
这些模板有不同的名称标识,由"name"
标签设置。
因此,您不是在该文件中创建名称为 instance_create
、instance_update
和 instance_delete
的三个不同实例,而是创建三个具有这些名称的模板,稍后将附加到resources
列表,后来返回到config.yamlresources.type
标签。
一旦使用创建命令,部署管理器就会依次构建和执行这些模板。请注意,它们可能会出现乱序,这是由于 not using a 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
下的参数是 fields in the request body to bigtableadmin.projects.instances.create (which is nesting a clusters object parameters and a instance object parameters)。请注意,属性下的 InstanceId 始终相同,因此模板执行调用的 BigTable 实例始终相同。
事实是,不仅您链接的示例在同一个脚本中创建了各种模板 运行,而且每个模板的资源类型 is a call to the BigTable API。
通常模板资源是用 type
标签指定的,但由于您调用的资源直接 运行 调用了 API(即不仅仅是指定 gcp-types/bigtableadmin-v2
,您指定的是 bigtableadmin-v2:bigtableadmin.projects.instances.create
),使用了 action
标签。我没有在任何地方发现这种用法上的差异,但需要这样指定。
如果资源以 create/update/delete.
最后,我在我这边进行了调查,metadata.runtimePolicy
与资源类型是 API 调用这一事实有关(如前一点)。再一次,我没有在任何地方找到这个记录。
但是,由于这是一项要求,因此您必须始终在此字段中设置正确的值。它基本上归结为将 metadata.runtimePolicy
设置为此值,具体取决于您调用的 API 类型:
create -> ['CREATE']
update -> ['UPDATE_ON_CHANGE']
delete -> ['DELETE']
总结:
- 您不是在创建三个不同的实例,而是在同一个 BigTable 实例上执行工作的三个不同的模板。
- 如果您正在调用 API 端点 (create/update/delete),您需要将资源
type
标志更改为action
,而不是仅仅命名基础 API. - 调用上述端点之一时,
metadata.runtimePolicy
值是必需的。