TripleO UI¶
我们需要一个图形用户界面来支持使用 TripleO 部署 OpenStack。
问题描述¶
Tuskar-UI 是目前唯一能够进行 TripleO 部署的 GUI,但它存在一些显著的问题。
首先,它的后端依赖于过时的 Tuskar API 版本,这对于复杂的 overcloud 部署来说是不够的。
其次,它被实现为 Horizon 插件,并置于 Horizon 框架下,这被证明是不理想的,原因如下
置于 Horizon 项目之下。为了能够开发 Tuskar-UI,需要深入了解 Horizon 和 TripleO 项目。此外,为了能够批准补丁,需要成为 Horizon 核心审查员。这种限制大大减少了可以贡献的人数,并且使得 Tuskar-UI 开发者很难真正提交代码。
Horizon Django 应用的复杂性。Horizon 是一个非常复杂且庞大的应用,包含许多 OpenStack 服务。它变得非常大,缺乏灵活性,并且包含几个不必要的中间层。因此,我们看到出现了许多新的 GUI,它们被实现为独立的(通常是完全客户端 JavaScript)应用,而不是作为 Horizon 插件。Ironic webclient[1] 就是一个例子。Horizon 的缺点已被认识到,并且在下一点中描述了一种解决它的尝试。
迁移到 Angular JS(版本 1)。为了解决上述问题,Horizon 社区决定将其重写为 Angular JS。然而,他们没有进行完全重写,而是选择了一种更渐进的方法,从而导致了更多的中间层(原始 Django 层变成了基于 Angular 的前端的 API)。虽然目标是最终消除不需要的层,但这一过程进展非常缓慢。此外,Horizon 的这次重写是针对 AngularJS 版本 1 的,该版本可能很快就会过时,而版本 2 就在眼前。这可能意味着在不久的将来又需要进行一次完整的重写。
打包问题。迁移到 AngularJS 带来了一组新的问题,与所有主流 Linux 发行版中基于 nodejs 的工具的糟糕打包状态有关。
提议的变更¶
概述¶
为了解决对基于 TripleO 的 GUI 的需求,同时避免上述问题,我们建议在 TripleO 框架下引入一个新的 GUI 项目,TripleO UI。
由于 TripleO UI 是 TripleO 特定的 UI,它将置于 TripleO 框架下,这将引起 TripleO 审查员的注意,并允许 TripleO 核心审查员批准补丁。这将促进代码贡献过程。
TripleO UI 将是一个专为 overcloud 部署和管理设计的 Web UI。它将是一个轻量级、独立的客户端应用,旨在实现灵活性、适应性和可重用性。
TripleO UI 将是一个完全客户端的 JavaScript 应用。它将是无状态的,不包含任何业务逻辑。它将使用 TripleO REST API[2],该 API 将暴露在 tripleo-common 库[3] 中实现的 overcloud 部署工作流业务逻辑。与包含许多不需要的中间层的先前架构相反,这个架构将非常简单,仅由提供 JSON 的 REST API 和使用它的客户端 JavaScript 应用组成。
开发堆栈将由 ReactJS[4] 和 Flux[5] 组成。我们将使用 ReactJS 实现 Web UI 组件,并使用 Flux 进行架构设计。
由于上述打包问题,我们目前不会为该应用提供任何软件包。我们将简单地使代码可供使用。
替代方案¶
另一种选择是继续在 Horizon 框架下开发 Tuskar-UI。除了上述所有问题之外,这种方法还需要完全重写 Tuskar-UI 后端,使其使用新的 tripleo-common 库。
安全影响¶
本提案引入了一个全新的应用;构建客户端 Web 应用时,所有标准的安全性问题都适用。
其他最终用户影响¶
我们计划构建一个独立的 Web UI,它能够使用 TripleO 部署 OpenStack。由于目前不存在这样的 GUI,这对于 TripleO 的采用来说可能是一个巨大的推动。
性能影响¶
所提出的技术堆栈 ReactJS 和 Flux 具有出色的性能特征。TripleO UI 应该是一个轻量级、快速、灵活的应用。
其他部署者影响¶
无
开发人员影响¶
目前,由于上述原因,在 Tuskar-UI 上进行开发很不舒服。本提案应该会带来更舒适的开发体验,因为它将 TripleO UI 逻辑地置于 TripleO 框架下,使其受到 TripleO 开发者和核心审查员的直接关注。
实现¶
负责人¶
主要负责人
jtomasek
flfuchs
jrist
<需要具备 JS 和 CI 技能的人员>
工作项¶
这是一个关于在 TripleO 框架下采用新的图形用户界面的总体提案。特定功能的实现将在后续提案中介绍。
依赖项¶
我们依赖于 TripleO REST API[2] 的创建,而这又依赖于 tripleo-common[3] 库包含所有必要的功能,以实现高级 overcloud 部署。
目前正在调查使用 Mistral 提供 REST API,而不是构建新的 API,作为另一种选择。
测试¶
TripleO UI 应该经过彻底的测试,包括单元测试和集成测试。每个新功能和错误修复都应该附带适当的测试。
TripleO CI 应该更新以测试 TripleO UI。
文档影响¶
TripleO UI 必须经过充分的文档记录,并符合 OpenStack 标准。我们需要开发人员和部署文档。文档将存储在 tripleo-docs 仓库中。
参考资料¶
[1] https://github.com/openstack/ironic-webclient [2] https://review.openstack.org/#/c/230432 [3] https://specs.openstack.org/openstack/tripleo-specs/specs/mitaka/tripleo-overcloud-deployment-library.html [4] https://fbdocs.cn/react/ [5] https://fbdocs.cn/flux/