• [bug 1618235] User can now delete all characters typed in input search without causing the selected facet to disappear when the last character is deleted.

  • [bug 1635505] Horizon now properly allows to use arrow keys inside of the input search, without triggering a new text search that refreshes the content of the table below.


  • Menu follows the search input position as the user adds more facets



  • The developer enabled files have been moved from openstack_dashboard/enabled to openstack_dashboard/contrib/developer/enabled. To enable them, copy into openstack_dashboard/local/enabled and set DEBUG = True.


  • There will no longer be any WARNING messages regarding the developer panels in logs.



Angular actions now should return a promise that resolves with an object structured in a way to indicate what the action did (or didn’t do).

JavaScript can now access the Keystone Token.

Many of Horizons XStatic packages were updated during this cycle.

现在,一个资源类型(如镜像)的详情页可用使用 Angular 应用级注册表来注册视图,从而使开发人员可用方便地创建或扩展详情视图中地内容。在这个版本中,这些视图作为标签页出现在详情页中。

In an effort to standarize our HTML class naming conventions, we will be updating various class names to use dashes, instead of underscore or camelcasing, to match with Bootstrap’s convention.

Horizon no longer requires Nova (or Glance) to function; it will run as long as keystone is present (for instance, swift-only deployments).

The Images panel now may be configured to use either the legacy or Angular code.

To aid in continued maintenance of Horizon as a themable and customizable framework, the highly customized ‘default’ styles are being dropped in favor of standard Bootstrap styles. The ‘default’ theme will only house scss variable changes going forward.

Angular components now exist to provide simple-to- configure panels and tables, based off of registry information about resources (e.g. Instances).

Modal sizes now inherit from Bootstrap’s theme variables.

We now automatically determine the static folder location for xstatic packages being used by Horizon.


  • An action-result service provides convenience methods for construction of the result, and for parsing of a resolved object

  • Horizon and Horizon Plugins can access the Keystone Token from JavaScript so that they can make CORS calls directly to other OpenStack Services. This can enable much more responsive UI.

  • 在设置里增加了一个``ANGULAR FEATURES``的新目录,允许新AngularJS特性的简单转换。

  • Added the Scheduler Hints tab to the new Launch Instance workflow to allow adding scheduler hints to an instance at launch. In addition to adding custom key-value pairs, the user can also choose from properties in the glance metadata definitions catalog that have the OS::Nova::Server resource type and scheduler_hints properties target.

  • Added settings support to the angular workflow service so each step in a workflow can specify a boolean setting that must pass in order for the step to be displayed.

  • [blueprint admin-views-filter-first] This blueprint provides a configurable setting to allow operators require admin users to provide a search criteria first before loading data into admin views.

  • [blueprint angular-table-directive] This blueprint provides a way for developers to programatically declare an Angular table vs writing HTML markup. It reduces the boilerplate HTML code. For a basic table, you need to pass in the data and the column configuration into the hz-dynamic-table directive.

  • [blueprint angular-template-overrides] This blueprint provides a way for deployers to use a theme to override HTML fragments used by Angular code in Horizon. For example, to override the launch instance help panel when the ‘material’ theme is used, create openstack_dashboard/themes/material/static/templates/framework /widgets/help-panel/help-panel.html. All of the client side templates are now compiled into a single JavaScript file that is minified and is given as an additional file in the manifest.json file.

  • [blueprint cinder-consistency-groups] This feature adds 2 new tabs to the Project Volumes panel. The first tab will display Consistency Groups, and the second tab will display Consistency Group Snapshots. Consistency Groups (CG) contain existing volumes, and allow the user to perform actions on the volumes in one step. Actions include: create/update/delete CGs, snapshot all volumes in a CG, clone all volumes in a CG, and create a new CG and volumes from a CG snapshot. Policies associated with Consistency Groups exist in the Cinder policy file, and by default, all actions are disabled.

  • [blueprint configurable-boot-sources] Allows administrators to restrict which sources are available to boot from in the Launch Instance modal by adding 4 new settings to LAUNCH_INSTANCE_DEFAULTS (disable_image, disable_instance_snapshot, disable_volume, disable_volume_snapshot).

  • Create from a local file feature is added to both Angular and Django Create Image workflows. It works either in a ‘legacy’ mode which proxies an image upload through Django, or in a new ‘direct’ mode, which in turn implements [blueprint horizon-glance-large-image-upload]. To use the direct mode HORIZON_IMAGES_UPLOAD_MODE setting should be changed to ‘direct’ value along with changing glance-api.conf cors.allowed_origin parameter to the URL from which Horizon is served.

  • Added ability to render angular row actions with additional details that explain the purpose of the action. These are rendered as tiles and are meant to depict the next steps a user might want to take for a given resource.

  • The port-details page has a new tab for managing Allowed Address Pairs. This tab and its features will only be available when this extension is active in Neutron. The Allowed Address Pairs tab will enable creating, deleting, and listing address pairs for the current port.

  • 支持一个参数,当创建端口时可以指定子网或者固定IP地址

  • directive (hz-details) 提供了智能显示一组视图的功能(通常与详情相关)。

  • 一个通用的详情显示会通过解析位置信息来决定资源类型,并为此类型显示相关的详情视图。

  • 描述符的概念使得传递信息很方便,它可以在全局范围内确定一个对象,用于通用的观点和行动。

  • Horizon now has a (non-navigational) route in Django so generic details pages are deep-linked.

  • 现在任何Angular页面可以使用一个共享的Django模板。

  • Adds complete support for Glance v2 so that Horizon no longer depends on having a Glance v1 endpoint in the Keystone catalog. Also provides code compatibility between Glance v1 and v2.

  • Adds a new config value called IMAGES_ALLOW_LOCATION, which allows users to set locations when creating or updating images. Depending on the Glance version, the ability to set locations is controlled by policies and/or configuration values.

  • 运行Horizon已不再需要必须提供Nova和Glance服务,只要提供Keystone服务,Horizon就可以正常运行。

  • the ANGULAR_FEATURES setting now allows for a key images_panel. If set to True, then the Angular Images panel will be used, while the Python version will be used if set to False.

  • Integration tests for Image features may also be toggled in openstack_dashboard/test/integration_tests/horizon.conf using the ‘panel_type’ feature, either set to ‘legacy’ or ‘angular’ to match the enabled panel type.

  • Horizon support for network IP availability feature. Enable Horizon admin network dashboard to be able to display IP availability. Enables 2 columns in the admin network subnets table to display the allocated IPs in a given subnet and unallocated free IPs for each subnet in the network.

  • 现已支持Geneve隧道协议的Neutron网络类型

  • Neutron provider网络类型现已支持Midonet。如需使用,请在配置文件中的``supported_provider_types``配置项中指定它。

  • Neutron Provider网络配置项现在更灵活了,操作者可以基于他们使用的不同后端网络配置不同的provider网络参数,包括新的网络类型,段ID范围等等。

  • Added new setting INTEGRATION_TESTS_SUPPORT, default value is False. This value is used when running compress command, so by default all static assets and html classes used by integration tests are removed from Horizon production build. Integration tests gate job sets this variable to True and recompresses static assets.

  • The hz-resource-table directive takes in a Heat resource name (e.g. ‘OS::Nova::Server’) and uses the Angular registry to provide actions, columns, and summary views.

  • The hz-resource-panel directive takes in a Heat resource name (e.g. ‘OS::Nova::Server’) and displays an appropriate header and allows content to be transcluded to build the panel page.

  • 添加了一个新的设置 – OVERVIEW_DAYS_RANGE,它定义了详情框中的计费器的默认日期范围(如果它的值是整数 N,则是今天减去 N 天;如果设置为 None, 则是从当前月开始直到今天)。使用这个设置可以在生成详情框的内容时限制需要获取的数据数量。和以前不同,它的默认值是 1 (以前的设置会导致在大型环境中出现严重的滞后问题)。

  • Modal sizes now inherit their value from theme variables. Two additional sizes are available now for use in Horizon, extra to the standard 3 sizes of Bootstrap Modals, modal-xs and modal-xl.

  • Added the TOKEN_DELETE_DISABLED setting, so that deployers can customise the revocation of a users token on log out.


  • If you set ‘images_panel’ to False for the ANGULAR_FEATURES option (which is not the default) and configure Horizon to use Glance v2, Ramdisk ID and Kernel ID don’t show properly on the “Edit Image” screen.


  • 尽管不是必需的,最好保证您动作以期待的结构返回结果。

  • The TEMPLATE_* settings have been replaced with a TEMPLATE dict. This will likely cause issues when porting settings to this version of Horizon. The TEMPLATE_DEBUG setting has been removed and is tied to the DEBUG setting now. A detailed explanation of this dict can be found at

  • The is_authenticated() and is_anonymous() functions in Django OpenStack Auth’s User class are properties when running under Django 1.10, and no longer take a margin parameter.

  • Horizon currently supports both Angular 1.3.x and Angular 1.4.x, but will remove 1.3 support in the future. See Migrating from 1.3 to 1.4

  • The breadcrumb navigation inside the details pages now applies across Horizon. A small change in the logic means that custom_breadcrumb items in the context no longer need to specify the panel name and link. See [blueprint navigation-improvements]

  • The final django TEMPLATE_LOADERS configuration will now be generated from TEMPLATE_LOADERS, CACHED_TEMPLATE_LOADERS and ADD_TEMPLATE_LOADERS settings. See the settings documentation for more information.

  • It is no longer necessary to include the version suffix into OPENSTACK_KEYSTONE_URL setting. Thanks to a recent update of django-openstack-auth library as of 2.3.0 release, Horizon will append the proper version suffix to the URL based on the value stored inside OPENSTACK_API_VERSIONS[‘identity’] setting.

  • (可选的)使用公共的Angular模板作为Angular页面的基础,可以最小化模板代码,保证我们使用相同的特性/框架。

  • The OPENSTACK_IMAGE_FORMATS variable must be added to the REST_API_REQUIRED_SETTINGS setting in

  • If the ‘default’ theme is still required for legacy overrides to function, simply copy the styles in the ‘default’ theme into a pre-existing theme or create a new custom theme.

  • The status_unknown table row class has been replaced with the default bootstrap warning class.

  • Many Javascript files have moved to new locations in the horizon/lib static folder. Previously the locations of some files were hard-coded but now the locations are determined automatically based on the xstatic package name.


  • HORIZON_IMAGES_ALLOW_UPLOAD setting is deprecated and should be gradually replaced with HORIZON_IMAGES_UPLOAD_MODE setting.

  • Router rules is a horizon extension provided by Big Switch Networks. As part of the horizon-vendor-split work, we drop the extension from upstream horizon. It is now available as a separate plugin at

  • LBaaS v1 dashboard is now deprecated and will be removed in Ocata release. LBaaS v1 feature was removed from neutron-lbaas in Ocata and this functionality in Horizon is only for backward compatibility so that operators can upgrade Horizon first. Note that the Dashboard support for LBaaS v2 is provided as a Horizon plugin via neutron-lbaas-dashboard project.

  • All instances of HTML class ‘d3_pie_chart_usage’ to ‘pie-chart-usage’ All instances of HTML class ‘d3_pie_chart_distribution’ to ‘pie-chart-distribution’

  • The ‘default_ipv4_subnet_pool_label’ and ‘default_ipv6_subnet_pool_label’ options were deprecated in the Mitaka release and are no longer valid in the Newton release. Starting with Mitaka you can create one default subnet pool per address family through the Neutron API. These subnet pools will automatically show up in the subnet pool list using the name of the pool as label.

  • Inline Edit functionality for Horizon tables is now deprecated and will be removed in Horizon P (12.0) The functionality was removed from the following tables. Admin Volume Types table, Admin Metadata Definitions table, Identity Projects table and Identity Users table

  • Fullscreen Modals have been deprecated in favor of modal-xl. Currently, it is set to 95% of the viewable screen width.


  • Making Keystone Tokens available to JavaScript slightly increases the risk of a Token being captured. If you don’t need this functionality, it can be disabled by setting the following option in your local_settings: ENABLE_CLIENT_TOKEN = False


  • Hardcoded admin role is replaced with RBAC policy check in panels. Now users access to the panels is defined by policies and not user roles. The change affected the Admin dashboard and its panels (Overview, Hypervisors, Instances and Metadata Definitions).

  • LP-1585682 is fixed which grants Horizon the ability to properly version Keystone webpath endpoints (URLs like http://<hostip>/identity instead of http://<hostip>:5000).


  • XStatic-Angular已从1.3.7.0升级到1.4.10.1

  • XStatic-Angular-FileUpload已从1.4.0.1升级到12.0.4.0

  • XStatic-Bootstrap-SCSS已从3.2.0.0升级到3.3.7.0

  • XStatic-Bootswatch updated from to

  • XStatic-Font-Awesome updated from to

  • XStatic-Jasmine updated from to

  • XStatic-MDI updated from to

  • XStatic-Rickshaw updated from to

  • XStatic-Smart-Table updated from to

  • Glance v2 doesn’t support the copy-from feature, so this feature is disabled in Horizon when using Glance v2.