Stack 生命周期插件点¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/heat/+spec/stack-lifecycle-plugpoint
云提供商可能需要自定义代码来检查堆栈请求,在执行创建或更新堆栈的操作之前。一些提供商也可能需要在堆栈操作完成后运行代码。 提出了一种机制,通过该机制,提供商可以轻松地从 heat 向自己的代码添加预操作调用,该调用在执行堆栈工作之前进行,以及后操作调用,该调用在堆栈操作完成或失败后进行。
问题描述¶
至少有两个主要用例。(1) 在创建或删除模板实例(堆栈)之前,启用虚拟资源的全方位(整个模式)调度。 这通常包括决定在物理基础设施中托管虚拟资源的位置,以满足策略要求。 它还包括如果与堆栈创建或更新一起包含的策略无法满足,或者检查了其他云提供商策略无法满足,则使堆栈创建或更新失败。 例如,应用程序所有者要求虚拟机和连接到它们的卷部署在同一机架上。 另一个例子是,云提供商可能希望在部署应用程序之前咨询许可服务器。 另一个例子是,应用程序所有者可能要求他们的虚拟机分布在给定的机架数量上。(2) 启用与虚拟资源调度无关的策略检查,如果策略不满足,则使堆栈创建或更新失败。 例如,云提供商可能希望验证某些类型应用程序的计算资源是否使用特定的安全组部署。 另一个例子是,云提供商可能希望在部署超过 100 个虚拟机的模式时收到警告。
提议的变更¶
需要一个有序的 Python 类注册表,这些类实现预操作和/或后操作方法。 这将通过 stevedore 完成,并进行一些补充以强制对类进行完全(或部分)排序。 预操作和后操作方法不应修改参数堆栈。 任何修改都应被视为错误。 允许对堆栈进行状态更改以促进错误处理,这是一种可能的例外情况。[可以通过将深拷贝传递给插件来强制执行无修改规则,但这可能会产生不可接受的性能成本。] 预操作和后操作方法都可以指示失败,这将像任何其他堆栈失败一样处理。 在预操作调用失败时,如果注册了多个插件,则将为所有已处理的类调用后操作方法,以指示每个插件任何针对堆栈所做的决定都应被撤销。
所有堆栈操作都需要调用预操作或后操作,或两者都调用。 这至少包括创建、更新、删除、放弃和采用。 在基本设计中,对 parser.py 中的 Stack 类进行修改足以添加对通过生命周期插件注册表找到的预操作和后操作方法的调用。 后操作调用需要在正常路径和所有错误路径中进行调用。
备选方案¶
没有识别出其他方法可以让操作员(heat 提供商)使用此功能扩展 heat 以用于所有堆栈部署。
https://blueprints.launchpad.net/heat/+spec/lifecycle-callbacks 描述了一种方法,其中 heat 用户可以选择性地在模板中指定堆栈和资源事件的回调。 除非 heat 提供商严格控制用户可以使用的模板,否则它不会提供上述用例所需的普遍回调(适用于所有堆栈)。
实现¶
一个包含蓝图完整实现的补丁 (https://review.openstack.org/#/c/89363/) 正在旧的预规范流程下进行审查。
负责人¶
- 主要负责人
William C. Arnold (barnold-8)
里程碑¶
- 完成目标里程碑
Juno-2
工作项¶
依赖项¶
无依赖