详细资源展示¶
https://blueprints.launchpad.net/heat/+spec/detailed-resource-show
在创建堆栈后,目前没有办法检索资源的属性,除非在 heat 之外(例如,用户可以获取 nova 服务器的 ID,并直接调用 nova 来获取这些属性)。
问题描述¶
目前,模板作者需要在 outputs 部分显式定义他们需要在堆栈创建后访问哪些属性。如果没有这样做,除非用户更新模板以将这些属性添加到 outputs 部分并随后更新堆栈,否则这些属性将无法再检索。
提议的变更¶
由于资源的属性实际上是通过资源客户端由 heat 检索的,这意味着用户可以从 heat 获取资源 ID 并直接与客户端交互(例如,获取 nova 服务器的 ID 并直接与 nova 通信)以检索其属性。
我们建议在显示特定资源的数据时返回所有资源属性。这样,用户将能够发出 resource-show 调用,并在创建堆栈后查找属性,即使模板作者事先没有考虑到它们。
由于这些属性可以通过资源的客户端或通过更改模板并将其添加到 outputs 部分来检索,因此不应比目前已有的方式带来任何更大的敏感数据泄露风险。
可以通过更改 API 响应以同时包含可以使用自动发现的属性(即具有属性模式的资源)来实现这一点。
# API # 下面的调用也将返回资源模式中的所有属性 /<tenant_id>/stacks/<stack_name>/<stack_id>/resources/<resource_name>
但是,有些资源具有无法使用其属性模式发现的动态属性,因此这种方法对这些资源不起作用。例如,OS::Heat::ResourceGroup 具有基于组类型暴露的 outputs/attributes 的动态属性,而 OS::Heat::SoftwareDeployments 具有 config 资源 outputs 属性中定义的每个 output 的属性。
对于此类资源,可以扩展 API 以接受一个查询参数,该参数将包含要检索的属性的名称。例如
# API
/<tenant_id>/stacks/<stack_name>/<stack_id>/resources/ <resource_name>?with_attr=foo&with_attr=bar
# heatclient
resource-show <stack_name> <resource_name> –with-attr foo –with-attr bar
但是,某些客户端或脚本可能希望直接使用给定的属性。对于这些情况,我们还可以添加两个新的端点:一个用于保持 RESTful 风格并仅返回资源的发现属性;另一个仅返回请求属性的值。
# API
/<tenant_id>/stacks/<stack_name>/<stack_id>/resources/<resource_name>/ attributes
/<tenant_id>/stacks/<stack_name>/<stack_id>/resources/<resource_name>/ attributes/<attribute_name>
# heatclient
heat resource-attributes <stack-id> <resource-name>
heat resource-attributes <stack-id> <resource-name> <attribute-name>
备选方案¶
或者,我们可以保持当前的 resource-show 行为不变,并且仅添加两个新的端点来返回属性信息。这样做的好处是实现起来更简单,因为只需要更改以添加新的端点。但是,缺点是必须发出两个单独的调用才能获取有关给定资源的所有可用信息:一个用于 resource-show,另一个用于 resource-attributes。
实现¶
负责人¶
- 主要负责人
andersonvom asifrc
里程碑¶
- 完成目标里程碑
Kilo
工作项¶
在格式化时将资源属性添加到引擎 API 中。
依赖项¶
无