======================
Horizon 2012.1 "Essex"
======================

Release Overview
================

During the Essex release cycle, Horizon underwent a significant set of internal
changes to allow extensibility and customization while also adding a significant
number of new features and bringing much greater stability to every interaction
with the underlying components.

Highlights
==========

Extensibility
-------------

Making Horizon extensible for third-party developers was one of the core
goals for the Essex release cycle. Massive strides have been made to allow
for the addition of new "plug-in" components and customization of OpenStack
Dashboard deployments.

To support this extensibility, all the components used to build on Horizon's
interface are now modular and reusable. Horizon's own dashboards use these
components, and they have all been built with third-party developers in mind.
Some of the main components are listed below.

Dashboards and Panels
~~~~~~~~~~~~~~~~~~~~~

Horizon's structure has been divided into logical groupings called dashboards
and panels. Horizon's classes representing these concepts handle all the
structural concerns associated with building a complete user interface
(navigation, access control, url structure, etc.).

Data Tables
~~~~~~~~~~~

One of the most common activities in a dashboard user interface is simply
displaying a list of resources or data and allowing the user to take actions on
that data. To this end, Horizon abstracted the commonalities of this task into a
reusable set of classes which allow developers to programmatically create
displays and interactions for their data with minimal effort and zero
boilerplate.

Tabs and TabGroups
~~~~~~~~~~~~~~~~~~

Another extremely common user-interface element is the use of "tabs" to break
down discrete groups of data into manageable chunks. Since these tabs often
encompass vastly different data, may have completely different access
restrictions, and may sometimes be better-off being loaded dynamically rather
than with the initial page load, Horizon includes tab and tab group classes for
constructing these interfaces elegantly and with no knowledge of the HTML, CSS
or JavaScript involved.

Nova Features
-------------

Support for Nova's features has been greatly improved in Essex:

* Support for Nova volumes, including:
    * Volumes creation and management.
    * Volume snapshots.
    * Realtime AJAX updating for volumes in transition states.
* Improved Nova instance display and interactions, including:
    * Launching instances from volumes.
    * Pausing/suspending instances.
    * Displaying instance power states.
    * Realtime AJAX updating for instances in transition states.
* Support for managing Floating IP address pools.
* New instance and volume detail views.

Settings
--------

A new "Settings" area was added that offers several useful functions:

* EC2 credentials download.
* OpenStack RC file download.
* User language preference customization.

User Experience Improvements
----------------------------

* Support for batch actions on multiple resources (e.g. terminating multiple
  instances at once).
* Modal interactions throughout the entire UI.
* AJAX form submission for in-place validation.
* Improved in-context help for forms (tooltips and validation messages).


Community
---------

* Creation and publication of a set of Human Interface Guidelines (HIG).
* Copious amounts of documentation for developers.

Under The Hood
--------------

* Internationalization fully enabled, with all strings marked for translation.
* Client library changes:
    * Full migration to python-novaclient from the deprecated openstackx library.
    * Migration to python-keystoneclient from the deprecated keystone portion
      of the python-novaclient library.
* Client-side templating capabilities for more easily creating dynamic
  interactions.
* Frontend overhaul to use the Bootstrap CSS/JS framework.
* Centralized error handling for vastly improved stability/reliability
  across APIs/clients.
* Completely revamped test suite with comprehensive test data.
* Forward-compatibility with Django 1.4 and the option of cookie-based sessions.

Known Issues and Limitations
============================

Quantum
-------

Quantum support has been removed from Horizon for the Essex release. It will be
restored in Folsom in conjunction with Quantum's first release as a core
OpenStack project.

Keystone
--------

Due to the mechanisms by which Keystone determines "admin"-ness for a user, an
admin user interacting with the "Project" dashboard may see some inconsistent
behavior such as all resources being listed instead of only those belonging to
that project, or only being able to return to the "Admin" dashboard while
accessing certain projects.

Exceptions during customization
-------------------------------

Exceptions raised while overriding built-in Horizon behavior via the
"customization_module" setting may trigger a bug in the error handling
which will mask the original exception.

Backwards Compatibility
=======================

The Essex Horizon release is only partially backwards-compatible with Diablo
OpenStack components. While it is largely possible to log in and interact, many
functions in Nova, Glance and Keystone changed too substantially in Essex to
maintain full compatibility.
