TripleO 工作流中的验证¶
https://blueprints.launchpad.net/tripleo/+spec/validations-in-workflows
Newton 版本引入了 TripleO 验证——一组可扩展的检查,用于尽早识别潜在的部署问题,并验证部署的 OpenStack 是否设置正确。这些验证由 TripleO UI 自动运行,但命令行工作流不支持,我们的 CI 作业也未对其进行测试。
问题描述¶
启用后,TripleO UI 在规划和部署的适当阶段运行验证。这在 TripleO UI 代码库中完成,因此 python-tripleoclient 和 CI 无法使用。
TripleO 部署者可以手动运行验证,但他们需要知道在哪个阶段执行,并且需要通过直接调用 Mistral 来完成。
这导致命令行和 GUI 体验之间存在差异,并使 CI 难以测试验证。
提议的变更¶
概述¶
每个验证已经声明了应该在规划/部署过程中的哪个位置运行。这在 vars/metagata/groups 部分中。此外,tripleo.validations.v1.run_groups Mistral 工作流允许我们运行属于给定组的所有验证。
对于每个验证组(当前为 pre-introspection、pre-deployment 和 post-deployment),我们将更新 tripleo-common 中的相应工作流,以可选地调用 run_groups。
上述每个工作流将接收一个新的 Mistral 输入,名为 run_validations。它将是一个布尔值,指示是否应该将验证作为该工作流的一部分运行。
为了将此功能暴露给命令行用户,我们将向 python-tripleoclient 添加一个选项,用于启用/禁用验证(这将设置 run_validations Mistral 输入),以及一种将每个验证的结果显示到屏幕输出的方法。
当运行验证时,它们会将状态报告给 Zaqar,任何失败都将阻止部署。部署者可以禁用验证,如果他们希望在失败的情况下继续。
一个未解决的问题是部署后验证。Heat 堆栈创建/更新 Mistral 操作目前是异步的,我们没有办法在部署完成后调用操作。除非我们更改这一点,否则部署后验证可能需要手动运行(或通过 python-tripleoclient)。
替代方案¶
记录每个组的运行位置、方式,并以此为终。这有风险,已经熟悉 TripleO 的用户可能会错过验证,或者他们可能不会去理会。
我们仍然需要找到一种在 CI 作业中运行验证的方法。
为 python-tripleoclient 提供子命令来运行验证(和验证组),并依赖于人们手动运行它们。
这与 1. 类似,但提供了一种更轻松地运行验证并获取其结果的方法。
请注意,即使使用此规范中概述的建议,这可能是一个有用的补充。
在 python-tripleoclient 中做 GUI 所做的事情。客户端将知道何时运行哪个验证,并将报告结果。
缺点是我们需要在两个不同的代码库中实现和维护相同的规则,并且没有 API 来执行它们。即 Mistral 应该解决的问题。
安全影响¶
无
其他最终用户影响¶
我们需要修改 python-tripleoclient 以能够显示验证完成后状态。TripleO UI 已经这样做了。
部署者可能需要了解验证。
性能影响¶
运行一个验证可能需要大约一分钟(这取决于验证的性质,例如,它是否检查配置文件,或者是否需要登录到所有计算节点)。
如果我们同时运行多个验证,这可能会成为一个问题。
我们应该能够并行运行整个组。我们可能已经在这样做,但需要进行调查。具体来说,with-items 是按顺序还是并行运行任务?
还有一些选项可以让我们通过使用加速 Ansible playbook 的常见方法来加快验证本身的运行时间
禁用不需要它的验证的默认“setup”任务(此任务收集目标节点的硬件和系统信息,需要一些时间)
使用持久的 SSH 连接
使每个验证任务独立运行(默认情况下,Ansible 会在所有节点上运行一个任务,等待所有节点完成,然后移动到另一个任务)
每个验证运行
tripleo-ansible-inventory脚本,该脚本从 Mistral 和 Heat 收集有关已部署服务器和配置的信息。运行此脚本可能会很慢。当同时运行多个验证时,我们应该只生成一次库存并缓存结果。
由于验证是可选的,部署者始终可以选择不运行它们。另一方面,任何减慢速度都应该超过花费在调查失败部署上的时间。
我们将记录实际的时间差异。此信息应该可以从我们的 CI 环境中获得,但我们还应该提供裸机上的测量结果。
其他部署者影响¶
取决于验证是默认运行还是不运行,唯一的影響应该是让部署者可以选择运行或不运行它们。
开发人员影响¶
TripleO 开发人员可能需要了解验证,在哪里找到它们以及如何更改它们。
实现¶
负责人¶
- 主要负责人
tsedovic
- 其他贡献者
无
工作项¶
工作项目或任务 – 将该功能分解为实施它需要完成的事情。这些部分可能最终由不同的人完成,但我们主要试图了解实施的时间表。
添加
run_validations输入,并从部署和节点注册工作流中调用run_groups向 python-tripleoclient 添加一个选项来运行验证
使用 python-tripleoclient 显示验证结果
添加或更新一个 CI 作业来运行验证
向 tripleo-validations 添加一个 CI 作业
依赖项¶
无
测试¶
这应该使验证可以在 CI 中进行测试。理想情况下,我们应该验证已知验证在 CI 环境中的预期成功/失败。但让它们通过测试机制运行将是确保我们不会破坏任何东西的一个很好的第一步。
文档影响¶
我们需要记录我们有验证的事实,它们的位置以及何时以及如何运行它们。