分享

OpenStack Dashboard二次开发--简明教程

问题导读
1、如何理解Horizon的重要性?
2、对Dashboard进行二次开发,需要什么?
3、为什么需要在IndexView里定义好table_class和template_name的属性值和get_data()方法?





Horizon简介
Horizon是OpenStack的一个子项目,用于提供一个Web前端控制台(称为Dashboard),以此来展示OpenStack的功 能。通常情况下,我们都是从Horizon、Dashboard开始来了解OpenStack的。实际上,Horizon并不会为OpenStack添加 任何一个新的功能,它只是使用了OpenStack部分API功能,因此,我们可以扩展Horizon的功能,扩展Dashboard。

扩展Dashboard
Dashboard概览
1.png

图2-1-1 Dashboard界面

一个Dashboard(在django里称为app)通常情况下由四个组件组成,分别为panel、tab(可选)、table和view,如图 2-1-1所示。其中,panel、tab和table用于导航的,真正展示数据的在view里面。它们之间的关系是panel包含tab,tab包含 table,view包含table或者tab。

通过查看Horizon的源码,可从其目录结构看出它们之间的关系,如图2-1-2所示。
1.png

图2-1-2 Horizon源码目录结构

下面,我会以在admin这个Dashboard里扩展添加一个monitoring的panel为例,介绍扩展OpenStack Dashboard的流程。

定义panel
首先介绍Dashboard.py这个文件,它位于每个Dashboard的根目录,其作用是注册Dashboard(django里称为app)以及设置Dashboard的属性,比如Dashboard里有哪些panel。

打开admin目录下的Dashboard.py文件,设置SystemPanels有monitoring的panel:
1.png

我们可以在Dashboard.py文件里随意的添加、删除panel属性,这对于调试程序的时候很方便。

然后在amdin目录下创建一个monitoring的文件夹,并在monitoring文件夹里创建panel.py文件,定义panel:

1.png

这是最简单的panel,只定义了其名字。注意:slug属性的值要与monitoring文件夹名字一样。当定义完成后,要记得将其注册到Dashboard里。

定义url
Horizon是基于Django框架,程序是通过url来找到panel的,因此,需要在monitoring目录下建立urls.py文件,定义url:
1.png


定义table
table用于展示数据,Horizon提供了DataTable基类,我们可以通过继承DataTable来实现自定义的table:
1.png

在MonitoringTable里定义了两列resources和percent。

定义view
view是用来集成table或者tab的,Horizon提供了多种vie类,下面使用DataTableView来自定义我们自己的IndexView:

1.png

在IndexView里定义好table_class和template_name的属性值,同时需要定义好get_data()方法,此方法用于获取数据展示在table里。

至此,扩展Dashboard已完成,需要重启apache才能看到效果:sudo service apache2 restart。效果如下:
1.png


已有(3)人评论

跳转到指定楼层
lilili 发表于 2015-8-9 16:34:13
利用run_tests.sh检验代码的正确性没有错误,但是重启apache2以后新加的monitoring面板没有出现,与之前界面没有任何差别,请问可能是什么原因?
回复

使用道具 举报

lilili 发表于 2015-8-31 19:18:58
我也按照这个步骤添加panel,代码没有问题,重启apache2后没有任何改变,在线等回复。。。谢谢
回复

使用道具 举报

蔡天雄 发表于 2015-10-8 19:18:17
[mw_shl_code=python,true]from django.utils.translation import ugettext_lazy as _ [/mw_shl_code]
这行代码中的 ugettext_lazy 是否是ungettext_lazy 的误写?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条