openstack开发实践(三):Dashboard开发

Dashboard概述

Dashboard是openstack中提供的一个web前端控制台,以此来展示openstack的功能。Dashboard是一个基于Django Web Framework开发的标准的Python WSGI程序。关于Django的应用开发在上一篇教程openstack开发实践(三)中已经进行了详细的介绍https://blog.csdn.net/weixin_41977332/article/details/104324159。Dashboard将页面上的所有元素模块化,网页中一些常见元素(如表单,表格,标签页)全部被封装成Python类,每个组件都有自己对应的一小块HTML模板,当渲染整个页面的时候,Dashboard先查找当前页面有多少组件,然后将各个组件分别进行渲染变成一段HTML片段,最后拼装成一个完整的HTML页面,返回给浏览器

Dashboard UI整体结构

下图为一个标准的Dashboard页面。一个dashboard面板可以分为三层:
Dashboard—>PanelGroup—>Panel,UI结构最上面为Header,左上边为logo,然后是Dashboard,包括项目,管理员,身份管理,(Mydashboard为我自己开发并添加上去的dashboard,官方版本的仅有项目,管理员,身份管理)。每一个Dashboard都可以理解为是Django中的一个APP,Django中的APP可以理解成对业务逻辑模块化的一种手段,里面可以包含自己独有的URL设定、模板和业务逻辑代码。每个Dashboard下面有若干个PanelGroup,比如项目下有计算和网络两个PanelGroup;每个PanelGroup下有若干个Panel,比如计算下有概况,实例,卷,镜像,密钥对这几个Panel。点开Panel之后右侧部分显示的是Panel Body,Panel Body中显示的是Data Table View。除了Data Table View之外还有一种是Tab View样式,如图系统信息所示
Dashboard面板
Tab_view页面

Dashboard源码结构

通过devstack安装的openstack中的dashboard源码位于/opt/stack/horizon目录下,主要包含两个代码文件夹:horizon和openstack_dashboard。horizon中主要是一些在Django基础上编写的通用组件,包括表格(table),标签页(tab),表单(form),导航(browser),工作流(flow)。这些代码和openstack的具体业务逻辑没有什么关系,如果要做一个新的Django项目,理论上也可以复用这些代码。horizon/base.py中还实现了一套Dashboard/Panel机制,使得Horzion面板上所有的Dashboard都是“可插拔”的,所有的Panel都是“动态加载”的。
在这里插入图片描述
openstack_dashboard/dashboards/中是各个面板的具体实现代码,其中包括各个面板的模板文件和后端Service交互的业务逻辑代码等。从中可以看出之前介绍的面板中各个dashboard即项目(project),管理员(admin),身份管理(identity),后续我们自己编写的dashboard即Mydashboard也要在这里创建一个文件夹并放入部分代码。在dashboards/enabled目录中的py文件则是告诉horizon在渲染Dashboard时载入这些Panel。enabled目录下的Dashboard和Panel是按照Python文件名的字典序添加的,所以可以通过_1000_.py,_2000_.py的命名来控制文件名的字典序。在python文件中可以找到页面上对应的project、admin等对应的调用。

Mydashboard开发

我们这里创建的Mydashboard如下图所示,可以展示虚拟机实例并且给正在运行的虚拟机创建快照。主要分为两大步骤:自定义Dashboard和Panel,添加创建快照操作
在这里插入图片描述

自定义Dashboard和Panel

创建Dashboard和Panel

我们使用官方提供的run_test.sh脚本来协助创建Dashboard和Panel,创建Dashboard步骤如下所示:

su - stack
cd horizon
mkdir openstack_dashboard/dashboards/mydashboard
./run_tests.sh -m startdash mydashboard --target openstack_dashboard/dashboards/mydashboard/

创建Panel的步骤如下所示

mkdir openstack_dashboard/dashboards/mydashboard/mypanel
./run_tests.sh -m startpanel mypanel --dashboard=openstack_dashboard.dashboards.mydashboard --target=openstack_dashboard/dashboards/mydashboard/mypanel

编写代码

添加PanelGroup和Panel

编辑mydashboard/dashboard.py,在Mydashboard下添加PanelGroup,名称为Mygroup,在Mygroup下添加一个Panel,名字为Mypanel:

from django.utils.translation import ugettext_lazy as _

import horizon

class Mygroup(horizon.PanelGroup):
    name = _("My Group")
    slug = "mygroup"
    panels = ('mypanel',)
class Mydashboard(horizon.Dashboard):
    name = _("Mydashboard")
    slug = "mydashboard"
    panels = (Mygroup,)  # Add your panels here.
    default_panel = 'mypanel'  # Specify the slug of the dashboard's default panel.


horizon.register(Mydashboard)
定义tables

接下来添加tables,tabs和views。首先定义tables,在mydashboard/mypanel目录下创建tables.py,内容如下:

from django.utils.translation import ugettext_lazy as _
from horizon import tables


class MyFilterAction(tables.FilterAction):
	name = "myfilter"


class InstancesTable(tables.DataTable):
    name = tables.Column('name', verbose_name=_("Name"))
    status = tables.Column('status', verbose_name=_("Status"))
    availability_zone = tables
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值