根据可用服务有条件地暴露资源¶
包含您的 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_types和show_resource_type服务方法中的更改单元测试
场景集成测试(基于一些“奇特”资源)- 检查资源是否列为可用 - 检查包含资源的模板是否通过验证
依赖项¶
无