“None”资源,什么也不做!¶
https://blueprints.launchpad.net/heat/+spec/noop-resource
添加一个“None”资源,旨在简化资源注册表条目到始终通过但什么也不做的实现的映射。
问题描述¶
目前,在一个大型的、可组合的嵌套模板树中,由许多严格定义的父模板控制,通常需要提供可选接口,以便可以链接额外的逻辑。
简化示例,源自 TripleO(这种模式在多个地方重复出现)
resource_registry:
OS::TripleO::Controller: foo/controller.yaml
OS::TripleO::ControllerExtraConfig: noop.yaml
这里我们有一个嵌套模板,它创建一个“controller”节点,并进行一些标准配置。然后,在某些情况下,我们希望挂入一些额外的配置步骤,或者提供一个能够实现该功能的接口。
resources:
controller:
type: OS::TripleO::Controller
properties:
aproperty: 123
extra_config:
type: OS::TripleO::ControllerExtraConfig
properties:
server: {get_resource: controller}
ExtraConfig “noop.yaml” 实现只是一个空模板,它接收“server”参数。
当它们所做的只是复制“真实”实现所期望的接口时,避免复制这些“noop”模板会很好。最终你会得到多个带有不同参数/输出的 noop.yaml 文件,这既不方便又容易出错。
提议的变更¶
添加一个 OS::Heat::None 资源,它将取代 noop.yaml
resource_registry:
OS::TripleO::Controller: foo/controller.yaml
OS::TripleO::ControllerExtraConfig: OS::Heat::None
该资源将接受任何属性,并返回任何属性(作为 None)。
备选方案¶
另一种选择是,希望提供可选附加功能的接口的模板作者需要继续维护多个实际上什么也不做的模板,就像目前 TripleO 中发生的那样。
实现¶
负责人¶
- 主要负责人
shardy
里程碑¶
- 完成目标里程碑
liberty-2
工作项¶
- 引擎变更
实现 noop 资源和测试。
- 文档变更
确保代码中存在文档字符串,以便更新模板指南。
依赖项¶
无