Add spec for TripleO UI
Change-Id: I910846be8b21269169f9a62ef74b2ac25114ec72
This commit is contained in:
parent
66aca911e4
commit
d6d5fd50a8
|
@ -0,0 +1,175 @@
|
||||||
|
==========
|
||||||
|
TripleO UI
|
||||||
|
==========
|
||||||
|
|
||||||
|
We need a graphical user interface that will support deploying OpenStack using
|
||||||
|
TripleO.
|
||||||
|
|
||||||
|
Problem Description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Tuskar-UI, the only currently existing GUI capable of TripleO deployments, has
|
||||||
|
several significant issues.
|
||||||
|
|
||||||
|
Firstly, its back-end relies on an obsolete version of the Tuskar API, which is
|
||||||
|
insufficient for complex overcloud deployments.
|
||||||
|
|
||||||
|
Secondly, it is implemented as a Horizon plugin and placed under the Horizon
|
||||||
|
umbrella, which has proven to be suboptimal, for several reasons:
|
||||||
|
|
||||||
|
* The placement under the Horizon program. In order to be able to develop the
|
||||||
|
Tuskar-UI, one needs deep familiarity with both Horizon and TripleO projects.
|
||||||
|
Furthermore, in order to be able to approve patches, one needs to be a
|
||||||
|
Horizon core reviewer. This restriction reduces the number of people who can
|
||||||
|
contribute drastically, as well as makes it hard for Tuskar-UI developers to
|
||||||
|
actually land code.
|
||||||
|
|
||||||
|
* The complexity of the Horizon Django application. Horizon is a very complex
|
||||||
|
heavyweight application comprised of many OpenStack services. It has become
|
||||||
|
very large, inflexible and consists of several unnecessary middle layers. As
|
||||||
|
a result of this, we have been witnessing the emergence of several new GUIs
|
||||||
|
implemented as independent (usually fully client-side JavaScript) applications,
|
||||||
|
rather than as Horizon plugins. Ironic webclient[1] is one such example. This
|
||||||
|
downside of Horizon has been recognized and an attempt to address it is
|
||||||
|
described in the next point.
|
||||||
|
|
||||||
|
* The move to Angular JS (version 1). In an attempt to address the issues listed
|
||||||
|
above, the Horizon community decided to rewrite it in Angular JS. However,
|
||||||
|
instead of doing a total rewrite, they opted for a more gradual approach,
|
||||||
|
resulting in even more middle layers (the original Django layer turned into an
|
||||||
|
API for Angular based front end). Although the intention is to eventually
|
||||||
|
get rid of the unwanted layers, the move is happening very slowly. In
|
||||||
|
addition, this rewrite of Horizon is to AngularJS version 1, which may soon
|
||||||
|
become obsolete, with version 2 just around the corner. This probably means
|
||||||
|
another complete rewrite in not too distant future.
|
||||||
|
|
||||||
|
* Packaging issues. The move to AngularJS brought along a new set of issues
|
||||||
|
related to the poor state of packaging of nodejs based tooling in all major
|
||||||
|
Linux distributions.
|
||||||
|
|
||||||
|
Proposed Change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
In order to address the need for a TripleO based GUI, while avoiding the issues
|
||||||
|
listed above, we propose introducing a new GUI project, *TripleO UI*, under the
|
||||||
|
TripleO program.
|
||||||
|
|
||||||
|
As it is a TripleO specific UI, TripleO GUI will be placed under the TripleO
|
||||||
|
program, which will bring it to attention of TripleO reviewers and allow
|
||||||
|
TripleO core reviewers to approve patches. This should facilitate the code
|
||||||
|
contribution process.
|
||||||
|
|
||||||
|
TripleO UI will be a web UI designed for overcloud deployment and
|
||||||
|
management. It will be a lightweight, independent client-side application,
|
||||||
|
designed for flexibility, adaptability and reusability.
|
||||||
|
|
||||||
|
TripleO UI will be a fully client-side JavaScript application. It will be
|
||||||
|
stateless and contain no business logic. It will consume the TripleO REST API[2],
|
||||||
|
which will expose the overcloud deployment workflow business logic implemented
|
||||||
|
in the tripleo-common library[3]. As opposed to the previous architecture which
|
||||||
|
included many unwanted middle layers, this one will be very simple, consisting
|
||||||
|
only of the REST API serving JSON, and the client-side JavaScript application
|
||||||
|
consuming it.
|
||||||
|
|
||||||
|
The development stack will consist of ReactJS[4] and Flux[5]. We will use ReactJS
|
||||||
|
to implement the web UI components, and Flux for architecture design.
|
||||||
|
|
||||||
|
Due to the packaging problems described above, we will not provide any packages
|
||||||
|
for the application for now. We will simply make the code available for use.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
The alternative is to keep developing Tuskar-UI under the Horizon umbrella. In
|
||||||
|
addition to all the problems outlined above, this approach would also mean a
|
||||||
|
complete re-write of Tuskar-UI back-end to make it use the new tripleo-common
|
||||||
|
library.
|
||||||
|
|
||||||
|
Security Impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
This proposal introduces a brand new application; all the standard security
|
||||||
|
concerns which come with building a client-side web application apply.
|
||||||
|
|
||||||
|
Other End User Impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
We plan to build a standalone web UI which will be capable of deploying
|
||||||
|
OpenStack with TripleO. Since as of now no such GUIs exist, this can be a huge
|
||||||
|
boost for adoption of TripleO.
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
The proposed technology stack, ReactJS and Flux, have excellent performance
|
||||||
|
characteristics. TripleO UI should be a lightweight, fast, flexible application.
|
||||||
|
|
||||||
|
|
||||||
|
Other Deployer Impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer Impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Right now, development on Tuskar-UI is uncomfortable for the reasons
|
||||||
|
detailed above. This proposal should result in more comfortable development
|
||||||
|
as it logically places TripleO UI under the TripleO program, which brings
|
||||||
|
it under the direct attention of TripleO developers and core reviewers.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
Primary assignees:
|
||||||
|
|
||||||
|
* jtomasek
|
||||||
|
* flfuchs
|
||||||
|
* jrist
|
||||||
|
* <TBD person with JS & CI skills>
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
This is a general proposal regarding the adoption of a new graphical user
|
||||||
|
interface under the TripleO program. The implementation of specific features
|
||||||
|
will be covered in subsequent proposals.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
We are dependent upon the creation of the TripleO REST API[2], which in turn
|
||||||
|
depends on the tripleo-common[3] library containing all the functionality
|
||||||
|
necessary for advanced overcloud deployment.
|
||||||
|
|
||||||
|
Alternatively, using Mistral to provide a REST API, instead of building a new
|
||||||
|
API, is currently being investigated as another option.
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
TripleO UI should be thoroughly tested, including unit tests and integration
|
||||||
|
tests. Every new feature and bug fix should be accompanied by appropriate tests.
|
||||||
|
|
||||||
|
The TripleO CI should be updated to test the TripleO UI.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
TripleO UI will have to be well-documented and meet OpenStack standards.
|
||||||
|
We will need both developer and deployment documentation. Documentation will
|
||||||
|
live in the tripleo-docs repository.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
[1] https://github.com/openstack/ironic-webclient
|
||||||
|
[2] https://review.openstack.org/#/c/230432
|
||||||
|
[3] http://specs.openstack.org/openstack/tripleo-specs/specs/mitaka/tripleo-overcloud-deployment-library.html
|
||||||
|
[4] https://facebook.github.io/react/
|
||||||
|
[5] https://facebook.github.io/flux/
|
Loading…
Reference in New Issue