2. Jio Customer Interfaces Technology & Frameworks
2
Horizon: Dashboard Framework
OpenStack Horizon is a powerful web-framework built on Django that is easily
extended. We can see how easy it is to create our own Horizon dashboard and
interface with services outside of OpenStack through RESTful APIs.
Horizon is a glimpse into the future of infrastructure single-pane-of-glass
management.
This has been something we have been promised for years from the proprietary
vendors and only now with OpenStack Horizon do we have some real hope.
Overview
• Django-based application that provides access to OpenStack services
• Typically deployed as an Apache WSGI application
• Leverages well known existing technologies
– Bootstrap, jQuery, Underscore.js, AngularJS, D3.js, Rickshaw, LESS CSS
• Extends Django stack to enhance application extensibility
Horizon is an OpenStack project responsible for providing a dashboard. It brings together all
OpenStack projects in a single-pane-of-glass. The below diagram illustrates the connectivity
between the Horizon dashboard and other OpenStack services.
image-1
By building custom dashboards it is possible to seamlessly integrate external components or
services with OpenStack.
Horizon to allow tighter coupling of OpenStack and enterprise infrastructure
Before diving into the upcoming features and updates for the Kilo release, lets have a quick
recap on Juno, covering the key updates.
3. Jio Customer Interfaces Technology & Frameworks
3
Recap Till Juno:
Support for Sahara: this allows you to create clusters, create jobs to run on those
clusters, and other data processing.
Better plug-in support: the team fleshed out primitive plug-in support from
Icehouse. It now allows you to pull in static files, javascript, images, etc. and helps
operators move away from the model in which they have to hack the code in order
to extend it.
UX updates: the team was previously locked into some older versions of technology
for styling in JavaScript. This was updated in Juno and resulted in lots of styling and
UX improvements.
Metadata: the team is providing further enhancements.
Going ahead with Horizon Kilo: WHY?
AngularJS
One of the main areas of focus for Horizon has been around better user experience. Horizon
has been moving towards AngularJS as a client-side architecture in order to provide better,
faster feedback to users, decrease the amount of data loading on each request, and push
more of the UI onto the client side.
For the Kilo release, the team is working on a reference implementation to dictate how
AngularJS will be implemented in Horizon.
AngularJS in Horizon:
image-2
4. Jio Customer Interfaces Technology & Frameworks
4
Support for Ironic
Horizon will support Ironic in the Kilo release cycle for both end users and operators. End
users will be able to set up a bare metal instance and operators can specify new nodes and
bring them in and allocate them.
Improved Table Experience
Currently, filtering and pagination within Horizon are inconsistent. For Kilo, the table
experience will be improved by much of it to the client side, caching more data on the client
and providing pagination and filtering in the Horizon code instead of relying on the APIs to
do it.
Wizard
There is a wizard in Horizon currently, but it's primitive and it has remained largely stagnant
through Havana and Icehouse. OpenStack team plans to refocus on that in this release
because it's one of the biggest usability issues Horizon faces -- the launch instance workflow
is confusing and requires a lot of upfront knowledge.
The Horizon team has been working with the OpenStack UX team to design a better
workflow that will be implemented on the client side. The team will use the network wizard
as well to make sure they have an extensible format and an extensible widget.
Refine plugin support
It’s important that Horizon has a clean plug-in mechanism that doesn’t involve editing
horizon source code.
Right now it requires a user to add files into the directory where Horizon gets deployed; this
isn't optimal because it causes problems when a user wants to update a package. The Kilo
version of Horizon will have refined plug-in support that allows users to point to where the
plug-in mechanism is and provide better Angular support.
Better theming
One concern that operators have is that they don't want to ship Horizon with the same UI as
everyone else, especially if they’re putting it in front of customers. OpenStack team’s said
that there's a need to be able to theme it better without having to hack the code.
The team plans to continue development and provide an improved theming mechanism
that's easy to work with.
Federation and SSO (Single Sign On)
Many corporations that use OpenStack already have an authentication backend where users
are set up. They don't want to have to duplicate their work by pulling all of that into
Keystone. For Kilo, the team is working on providing a mechanism for a federated login and
single sign on. Therefore, if you’re authenticated into your corporate auth system, when you
come to Horizon, you won't have to do it again.
The Horizon team is working with the Keystone team to provide federated authentication.
5. Jio Customer Interfaces Technology & Frameworks
5
Gating with integration test suite
The Horizon team has been pushing on this for several release cycles. Horizon has one
integration test that runs in Tempest, but they've been working on getting a full integration
test suite set up. Operators should be able to run all of the gating jobs by the end of Kilo.
Architectural Layers in Horizon Kilo:
image-3
Key values at the core of its architecture: Suitable for OpenStack Dashboard
Core Support: [IMP] Out-of-the-box support for all core OpenStack projects.
Horizon ships with three central dashboards, a “User Dashboard”, a “System
Dashboard”, and a “Settings” dashboard.
The Horizon application also comes with a set of API abstractions for the core
OpenStack projects in order to provide a consistent, stable set of reusable
methods for developers.
Extensible: Anyone can add a new component as a “first-class citizen”.
A Horizon dashboard application is based around the Dashboard class that
provides a consistent API and set of capabilities for both core OpenStack
dashboard apps shipped with Horizon and equally for third-party apps. The
Dashboard class is treated as a top-level navigation item. All you have to do is
import the dashboard you wish to modify.
Manageable: The core codebase should be simple and easy-to-navigate.
Within the application, there is a simple method for registering a Panel (sub-
navigation items). Each panel contains the necessary logic (views, forms,
tests, etc.) for that interface. This granular breakdown prevents files (such as
6. Jio Customer Interfaces Technology & Frameworks
6
api.py) from becoming thousands of lines long and makes code easy to find
by correlating it directly to the navigation.
Consistent: Visual and interaction paradigms are maintained throughout.
By providing the necessary core classes to build from, as well as a solid set of
reusable templates and additional tools (base form classes, base widget
classes, template tags, and perhaps even class-based views) we can maintain
consistency across applications.
Stable: [IMP] Reliable API with an emphasis on backwards-compatibility.
By architecting around these core classes and reusable components we
create an implicit contract that changes to these components will be made in
the most backwards-compatible ways whenever possible
Usable: Providing an awesome interface that people want to use.
Ultimately that’s up to each and every developer that touches the code, but if
we get all the other goals out of the way then we are free to focus on the
best possible experience.