怎样修改 Openstack Horizon(Dashboard)的显示界面 (一)

Openstack 有不少项目,好比 nova 是虚拟机管理,neutron 是虚拟网络管理, glance 是存储管理,而 horizon 是负责 Openstack 的统一界面。horizon 的源代码和 neutron 的不太同样,分布在两个地方,一个是 /usr/lib/python2.7/dist-packages/horizon 下面,这里放的是一些最基本的、能够共享的类、表格和模板等。另外一个是 /usr/share/openstack-dashboard 下面,这里放的是跟界面有直接关系、更加具体的类、表格和模板等,也是咱们须要修改的地方。python

Horizon 是一个基于 Django 的项目,若是熟悉 Django 的同窗会发现其实 Horizon openstack-dashboard 里面的文件命名与摆放位置与 Django 几乎是同样的:网络

.../openstack-dashboard/app

  - bin/python2.7

  - openstack_dashboard/ui

  - static/url

  - manage.pyspa

  - settings.pycode

从这个文件夹的结构就能够看出来,openstack-dashboard 其实就是 Django 的一个 project,而openstack_dashboard 是一个 app。进入 app,咱们能够看到,其中一些比较重要的文件和文件夹有:router

openstack_dashboard/blog

  - __init__.py

  - views.py

  - urls.py

  - settings.py

  - dashboards/

  - enabled/

  - static/

  - templates/

  - test/

  ...

是否是很熟悉?一会儿就能知道各个文件和文件夹是用来干吗的。url.py 负责最顶层的 url 跳转, views.py 负责接受和处理请求而后返回结果,static 里面放静态资源, templates 里面放模板, test 里面放 unittest。只有两个文件夹须要探索一下,dashboards 和 enabled。若是进到 enabled 文件夹里去看一下的话会发现,里面有好多添加和删除 panel 还有 group 的例子,其实这里就是一个能够比较简单的在 horizon 里面注册咱们本身想要新建的 panel 的地方。例如咱们能够把 _50_admin_add_panel.py.example 的后缀去掉,变成  _50_admin_add_panel.py,而后修改其中的内容:

# The name of the panel to be added to HORIZON_CONFIG. Required.
PANEL = 'plugin_panel'
# The name of the dashboard the PANEL associated with. Required.
PANEL_DASHBOARD = 'admin'
# The name of the panel group the PANEL is associated with.
PANEL_GROUP = 'admin'

# Python panel class of the PANEL to be added.
ADD_PANEL = \
    'openstack_dashboard.dashboards.admin.plugin_panel.panel.PluginPanel'

这样,咱们就在一个叫作 admin 的 dashboard 里面添加了一个叫作 plugin_panel 的 panel,而且告诉 horizon 具体的定义将会在 openstack_dashboard.dashboards.admin.plugin_panel.panel.PluginPanel 中出现。

那这个时候咱们就要去 dashboards 里面打量打量,而后作些具体的事情啦。首先咱们能够看到 dashboards 的结构是这样的:

dashboards/

  - __init__.py

  - admin/

  - project/

  -router/

  - settings/

由此可知,horizon 如今共有三个 dashboards,分别是 admin,project,和 router。admin 表明的是管理员能够看到的界面,project 表明的是用户能够看到的界面,二者在操做权限上会有必定的区别。而 router 的功用我也不是特别清楚。简单保险起见,咱们的自定义 panel 就落户在 admin 中。admin 文件夹中包括了不少文件和子文件夹,我就不在这里一一赘述了。咱们直接在其中建立一个子文件夹叫作 plugin_panel,而后再这个子文件夹中建立四个文件,使得这个文件夹看起来是这样的:

plugin_panel/

  - __init__.py

  - panel.py

  - url.py

  - views.py

待会儿 PluginPanel 这个类就会定义在 panel.py 中,而 url.py 和 views.py 将会分别承担这一层的路由跳转和收发请求及回复的做用。

今天就写到这里,dashboard 的具体修改计划将会在接下来的几篇文章中揭晓。

相关文章
相关标签/搜索