根据可用服务有条件地暴露资源

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/heat/+spec/keystone-based-resource-availability

根据服务的存在情况将资源暴露为可用。

问题描述

目前,我们无条件地注册并向用户展示所有在代码库中的资源插件,即使实际的服务可能未安装在特定的云环境中(例如,基于 Nova-network 的云环境中的 Neutron 资源,或者即使 Sahara 通常未安装,Sahara 资源)。这让用户感到困惑,因为他们会看到实际上无法使用的资源,并且导致模板实例化失败发生在后期,而不是在验证阶段失败。

随着我们将 contrib/ 资源移回代码库,并且在“大帐篷”治理模式下,我们可能会接受更多项目的代码库资源,这种情况只会变得更糟。

提议的变更

在资源类中添加一个额外的验证步骤,以检查所需的端点是否存在。可以通过资源类中已经可用的请求上下文 stack.context 访问端点。此方法应从 Resource.__new__ 调用,并在适当的时候引发 StackResourceUnavailable 异常(StackValidationError 的新子类)。

list_resource_types 方法应容忍 StackResourceUnavailable 异常,并且不要将引发此异常的资源作为可用资源列表的一部分输出。

客户端插件必须实现一个 service_type 属性,用于在验证期间以及客户端实例化期间使用。

每种资源类型都必须实现 default_client_plugin 类属性,以便在基础 Resource 类中使用,以验证上下文中端点的存在情况。

备选方案

保持现状,继续让用户感到困惑,并使包含不可用服务的资源的模板在后期失败。

实现

负责人

主要负责人

Kanagaraj Manickam <kanagaraj-manickam>

协助者

Pavlo Shchelokovskyy <pshchelo>

里程碑

完成目标里程碑

liberty-1

工作项

  • 客户端插件中的更改

  • 为所有资源插件添加 default_client_plugin

  • 基础资源类中的更改

  • list_resource_typesshow_resource_type 服务方法中的更改

  • 单元测试

  • 场景集成测试(基于一些“奇特”资源)- 检查资源是否列为可用 - 检查包含资源的模板是否通过验证

依赖项