用 Ansible 替换 Mistral¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/tripleo/+spec/tripleo-mistral-to-ansible
本提案的目标是在 TripleO 中用 Ansible playbook 替换 Mistral。
问题描述¶
Mistral 最初被添加是为了取代“API”,并为 tripleoclient 和 TripleO UI 提供通用逻辑。在 TripleO UI 被移除后,Mistral 的唯一使用者是 tripleoclient。这意味着 Mistral 现在增加了不必要的开销和复杂性。
提议的变更¶
概述¶
从 TripleO undercloud 中移除 Mistral,并将所有 Mistral workbooks、workflows 和 actions 转换为 tripleo-ansible 中的 Ansible playbook。然后更新 tripleoclient 以执行 Ansible playbook,而不是 Mistral workflows。
替代方案¶
唯一的其他候选方案是继续使用 Mistral,并接受其复杂性并重新投资于该项目。
安全影响¶
由于代码将重写当前处理密码、令牌和密钥的 Mistral workflows,因此我们需要小心。但是逻辑应该大致相同。
最终移除 Mistral 和 Zaqar 后,可以移除两个复杂的系统,这将减少安全问题的表面积。
新的 Ansible playbook 将仅使用 undercloud OpenStack APIs,因此它们不应创建新的攻击向量。
升级影响¶
升级需要移除 Mistral 服务,并确保 Ansible playbook 就位。
旧版本的 tripleoclient 将无法与 undercloud 配合使用,因为它们会期望 Mistral 存在。
Mistral 中的大部分数据是短暂的,但一些长期数据存储在 Mistral 环境中。这些数据可能会被移动到 Swift。
其他最终用户影响¶
CLI 命令的输出格式将会改变。例如,不再包含 Mistral workflow ID,而是包含其他 Ansible 特定的输出。在可能的情况下,我们将优先将 Ansible 输出流式传输给用户,使 tripleoclient 非常轻量和透明。
一些 CLI 命令,例如内省,需要从根本上改变其输出。目前它们使用 Zaqar 向客户端发送实时更新和进度。尽管将执行移动到本地,但我们无法轻松地在 Ansible playbook 运行时获取消息。这意味着用户可能需要等待很长时间才能获得任何反馈。
性能影响¶
预计不会有性能影响,因为内部逻辑应该大致相同。但是,Ansible playbook 将在用户运行 CLI 的位置执行,而不是由 Mistral 服务器执行。这取决于机器的资源和与 undercloud 的网络连接,可能会更快或更慢。
由于不会运行 Mistral 或 Zaqar,undercloud 本身应该有更多的可用资源。
其他部署者影响¶
如果有人直接使用 Mistral workflows,它们将停止工作。我们目前不知道有任何用户这样做,而且从未记录过。
开发人员影响¶
开发人员需要贡献 Ansible playbook,而不是 Mistral workflows。由于了解 Ansible 的开发人员池比了解 Mistral 的开发人员池更大,这应该使开发更容易。Ansible 贡献可能需要单元/功能测试。
实现¶
负责人¶
- 主要负责人
d0ugal
其他贡献者
apetrich
ekultails
sshnaidm
cloudnull
工作项¶
- Storyboard 正在被用来跟踪这项工作
将 Mistral workflows 迁移到 Ansible playbook。
迁移或替换自定义 Mistral actions 到 Ansible 原生组件。
移除 Mistral 和 Zaqar。
更新特定于 Mistral 的文档。
扩展我们的自动文档插件以支持 tripleo-ansible 中的 playbook。这将允许我们为提交到 tripleo-ansible 的所有 playbook 生成 API 文档,其中包括我们新的 `cli` 前缀的 playbook。
将 Mistral Workflows 转换为 Ansible¶
对于每个 Mistral workflow,需要采取以下步骤将其移植到 Ansible。
用 Ansible 重写 Mistral workflow 逻辑,并在适当的地方重用 Mistral Python actions。
更新 python-tripleoclient 以使用新的 Ansible playbook。它应该优先显示 Ansible 原生输出,而不是尝试复制以前的输出。
Workflows 和相关代码应该从 tripleo-common 中删除。
可以查看 `openstack undercloud backup` 命令的完整示例。
依赖项¶
无
测试¶
由于此更改将主要是对现有代码的重写,因此现有 CI 覆盖将对其进行测试。应根据需要改进和扩展此覆盖。
文档影响¶
所有对 Mistral 的引用都需要更新,以指向新的 ansible playbook。