Horizon是OpenStack的一个子项目,用于提供一个Web前端控制台(称为Dashboard),以此来展现OpenStack的功能。一般状况下,咱们都是从Horizon、Dashboard开始来了解OpenStack的。实际上,Horizon并不会为OpenStack添加任何一个新的功能,它只是使用了OpenStack部分API功能,所以,咱们能够扩展Horizon的功能,扩展Dashboard。前端
图2-1-1 Dashboard界面apache
一个Dashboard(在django里称为app)一般状况下由四个组件组成,分别为panel、tab(可选)、table和view,如图2-1-1所示。其中,panel、tab和table用于导航的,真正展现数据的在view里面。它们之间的关系是panel包含tab,tab包含table,view包含table或者tab。django
经过查看Horizon的源码,可从其目录结构看出它们之间的关系,如图2-1-2所示。app
图2-1-2 Horizon源码目录结构框架
下面,我会以在admin这个Dashboard里扩展添加一个monitoring的panel为例,介绍扩展OpenStack Dashboard的流程。url
首先介绍Dashboard.py这个文件,它位于每一个Dashboard的根目录,其做用是注册Dashboard(django里称为app)以及设置Dashboard的属性,好比Dashboard里有哪些panel。spa
打开admin目录下的Dashboard.py文件,设置SystemPanels有monitoring的panel:调试
咱们能够在Dashboard.py文件里随意的添加、删除panel属性,这对于调试程序的时候很方便。rest
而后在amdin目录下建立一个monitoring的文件夹,并在monitoring文件夹里建立panel.py文件,定义panel:继承
这是最简单的panel,只定义了其名字。注意:slug属性的值要与monitoring文件夹名字同样。当定义完成后,要记得将其注册到Dashboard里。
Horizon是基于Django框架,程序是经过url来找到panel的,所以,须要在monitoring目录下创建urls.py文件,定义url:
table用于展现数据,Horizon提供了DataTable基类,咱们能够经过继承DataTable来实现自定义的table:
在MonitoringTable里定义了两列resources和percent。
view是用来集成table或者tab的,Horizon提供了多种vie类,下面使用DataTableView来自定义咱们本身的IndexView:
在IndexView里定义好table_class和template_name的属性值,同时须要定义好get_data()方法,此方法用于获取数据展现在table里。
至此,扩展Dashboard已完成,须要重启apache才能看到效果:sudo service apache2 restart。效果以下: