堆栈断点¶
https://blueprints.launchpad.net/heat/+spec/stack-breakpoint
编排模板在工作时是一种强大的自动化工具;然而,当它失败时,故障排除可能非常困难。在开发过程中,调试失败的模板只是流程的一部分,但在生产环境中,先前可用的模板也可能由于许多原因而失败。提供对模板故障排除的支持不仅可以提高生产力,还可以通过允许用户“查看幕后”并更好地掌握自动化来帮助采用 Heat 模板。
通常,用户会首先检查日志以了解错误的线索。如果可能,用户可以通过在脚本中添加更多日志消息来增强日志。这种初步方法应该可以解决许多错误,但困难的错误可能需要更积极的调试。用户需要在模板失败的点之前或在该点停止,检查变量,检查环境,手动运行命令或脚本等。由于模板是声明性的,用户需要能够一致地重现错误。
对故障排除的支持是广泛的,需要许多蓝图来实现不同的功能来控制模板流程,重现错误和检查元素。相关的蓝图包括 troubleshooting-low-level-control,resolve-failed-stack-attributes,user-visible-logs,user-friendly-template-errors。此蓝图涵盖了如何在故障排除时更好地控制堆栈部署的特定场景。
问题描述¶
对于失败的堆栈,目前我们可以通过禁用回滚在失败点停止:当资源失败时,堆栈将停止,并保留已成功创建的资源。可能会出现一些虚假失败,因为某些资源可能会被中止,但可以通过显示资源的状态轻松识别它们。这种技术适用于故障排除 stack-create;一旦实现了 update-failure-recovery 蓝图,stack-update 可以以类似的方式处理。
然而,在许多情况下,失败点可能太晚或太难调试,因为失败的根本原因可能不明显或环境可能已更改。如果我们可以在失败之前的一个点暂停堆栈,那么我们将处于更好的故障排除位置。例如,我们可以检查环境和堆栈的状态是否符合我们的预期,我们可以手动运行下一步以查看它如何失败等。
在开发新的模板或资源类型时,将堆栈提升到将在执行新代码之前的一个点也是有用的。然后,开发人员可以手动执行和调试新代码。
提议的变更¶
用法如下
使用一个或多个指定为断点的资源名称运行 stack-create 或 stack-update,例如
heat stack-create my_stack –template-file my_template.yaml –breakpoint failing_resource_name
heat stack-update my_stack –template-file my_template.yaml –breakpoint failing_resource_name
断点也可以在环境文件中编码,指向特定的资源,例如
- breakpoints
resource: failing_resource_name
当引擎遍历依赖关系图时,它将停止在断点资源和所有依赖资源。没有依赖关系的其他资源将在停止之前完成。
运行 resource-list 或 resource-show 将显示断点处的资源为“CREATE.INPROGRESS”或“UPDATE.INPROGRESS”,并且资源尚未创建或更新。运行 event-list 将显示已发生断点,event-show 将提供有关断点的更多详细信息。
可以通过以下方式在命令行中删除断点
heat stack-update my_stack –template-file my_template.yaml –nobreakpoint failing_resource_name
在环境文件中,可以通过简单地删除断点属性中的资源名称来删除断点。这将在下次指定环境文件时生效。用户可能更倾向于使用命令行选项。
调试完成后,继续堆栈(手动完成,但也可以通过高级调试器自动完成)
步进:删除当前断点,为依赖关系图中下一个资源设置断点,恢复 stack-create(或 stack-update)。
运行到完成:删除当前断点,通过使用相同的模板和参数运行 stack-update 来恢复 stack-create 或 stack-update。
对于嵌套堆栈,断点将以嵌套模板的名称为前缀。
该更改将包括 heat 客户端、api 和环境以添加断点选项。为了使 Heat 引擎在资源处停止,我们将利用蓝图 lifecycle-callbacks。需要一些代码来设置和与回调接口,详细信息将在实现此蓝图时确定。
备选方案¶
手动方法只是编辑模板并删除任何失败的资源,直到剩余的资源可以成功创建。然后,可以通过将其添加回模板并运行 stack-update 来逐步完成每个资源。每次迭代都需要删除并重新创建整个堆栈。这种手动技术不能合并到高级工具中。
实现¶
负责人¶
- 主要负责人
Ton Ngo
里程碑¶
- 完成目标里程碑
Juno-3 或更高版本
工作项¶
Heat 客户端:添加指定断点的选项
Heat API:添加指定断点的选项
环境:添加指定断点的选项
与 lifecycle-callbacks 接口
依赖项¶
https://wiki.openstack.org/wiki/Heat/Blueprints/lifecycle-callbacks