软件配置通知部署进度

https://blueprints.launchpad.net/heat/+spec/software-config-progress

目前,当部署资源保持 IN_PROGRESS 状态时,无法确定配置是否耗时过长,或者是否在之前或之后发生了无关问题。唯一的选择是 ssh 到服务器进行问题诊断。此蓝图建议服务器在任何部署活动开始时向 heat 发出信号。

问题描述

目前,当部署资源保持 IN_PROGRESS 状态时,配置可能确实需要很长时间。在其他情况下,由于以下问题之一可能导致失败。

服务器启动期间可能出现的问题包括

  1. Nova 表示服务器已启动,但镜像实际上未能启动

  2. 服务器已启动,但未成功分配 IP 地址

  3. 启动时无法访问 Nova 元数据服务器以轮询初始元数据

在启动后但在执行特定部署之前可能出现的问题包括

  1. 已安装服务器代理、钩子和配置工具中的错误配置

5. 无法从 heat(或其他配置的轮询源)轮询部署元数据

最后,在实际执行部署时可能出现的问题

6. 由于身份验证或连接问题,服务器无法将结果信号传回 heat。

目前没有反馈表明实际部署已开始。如果用户之前获得了部署已开始的反馈,那么他们可以排除上述六种故障作为部署保持 IN_PROGRESS 状态的原因。

提议的变更

目前 SoftwareDeployment.signal 假定收到信号后部署任务就已完成。这将更改为检查信号详细信息,以获取指示这是一个 IN_PROGRESS 信号而不是 COMPLETE/FAILED 信号的额外数据。软件配置钩子将被修改为在开始部署任务之前发送 IN_PROGRESS 信号。

信号详细信息当前是包含每个输出值条目的 JSON 映射,以及 deploy_stdoutdeploy_stderrdeploy_status_code。将期望两个新的条目,deploy_statusdeploy_status_reason。SoftwareDeployment.signal 将检查此项,如果 deploy_statusIN_PROGRESS,则部署资源将保持在 IN_PROGRESS 状态。但是,将生成一个资源事件,以便向用户提供一些反馈,表明他们的部署任务已开始。

需要考虑向后兼容性问题,包括旧镜像在新的 heat 上运行,以及新镜像在旧的 heat 上运行。

旧镜像,新 heat

这里没有什么特别需要考虑的。服务器不会向 heat 发出信号表明部署正在开始,但部署资源已经处于 IN_PROGRESS 状态。唯一的含义是用户将不会看到额外的 IN_PROGRESS 事件,该事件告诉他们部署已开始。

新镜像,旧 heat

由于旧的 heat 假定收到信号后部署就已完成,因此钩子需要抑制发送任何 IN_PROGRESS 信号。可以通过钩子检查输入 deploy_status_aware 是否设置为 true 来实现。只有新的 heat 才会将此输入值设置为 true,因此钩子可以检查此输入并相应地行为。

备选方案

实现

负责人

主要负责人

<steve-stevebaker>

里程碑

完成目标里程碑

Kilo-1

工作项

工作项目或任务 – 将该功能分解为实施它需要完成的事情。这些部分可能最终由不同的人完成,但我们主要试图了解实施的时间表。

依赖项

此蓝图没有蓝图或库依赖项