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

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

.../openstack-dashboard/

  - bin/

  - openstack_dashboard/

  - static/

  - manage.py

  - settings.py

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

openstack_dashboard/

  - __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 的具体修改计划将会在接下来的几篇文章中揭晓。

怎样修改 Openstack Horizon(Dashboard)的显示界面 (一)的更多相关文章

  1. 【云计算】OpenStack Horizon DashBoard定制化,完整实现前后台交互

    项目代码见GitHub:https://github.com/junneyang/openstack-customization-example 参考资料: Install and configure ...

  2. 怎样修改 Openstack Horizon(Dashboard)的显示界面 (二)

    上一篇文章介绍了 Dashboard 的基本结构框架,那接下来的问题就是如何在这个框架中加入我们自己想要的内容了.在真正动手之前,让我们先来看看官方的页面是怎么做出来的.首先我们进入 /usr/sha ...

  3. openstack horizon 学习(2) navigation、dashboard、panels

    本章的主要内容是如何用horizon的navigation结构添加一个应用的面板. Horizon中提供了两种为应用添加panel的方法,一种是通过Pluggable Settings的方式,另一种是 ...

  4. ##7.Dashboard web管理界面-- openstack pike

    ##7.Dashboard web管理界面 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##.Dashboard ...

  5. Android之拨号界面图片风格,无信息默认显示界面修改

    Android之拨号界面图片风格,无信息默认显示界面修改 点开Dialer app,出现拨号,联系人,收藏三个选项卡,也就是三个Fragment,在三个界面都没有信息的时候会显示一个时钟,联系人,收藏 ...

  6. [转]Openstack Havana Dashboard测试和使用

    转贴一篇陈沙克老师的文章:http://www.chenshake.com/openstack-havana-dashboard-to-test-and-use/ Openstack Havana D ...

  7. openstack horizon开发第一天

    horizon插件构造 创建一个dashboardmkdir opesntack_dashboard/dashboards/mydashboardpython manage.py startdash ...

  8. openstack horizon 学习(3) DataTable

    上一篇中粗略的讲了下openstack中horizon的dashboard和panel的添加,本打算在这章中对有关于pluggable settings中的配置做详细的总结,然放弃了这念头.原因是搞懂 ...

  9. 在Dashboard中显示课表/日程表

    对于使用Mac系统的朋友们来说,Dashboard一定并不陌生.通过Dashboard我们可以方便地添加小组件,查看日历,天气,便签等等.然而,这些都是“定制”的内容.如何在Dashboard中显示自 ...

随机推荐

  1. 伪造http的ip地址,突破ip限制的投票程序

    某WEB投票程序, 使用 ip 限制和cookie限制技术,来限制每个ip每天只能投一次票,使用的是php开发,获取访问者的 ip 使用了搜狐的接口: http://txt.go.sohu.com/i ...

  2. Spark SQL 之 Migration Guide

    Spark SQL 之 Migration Guide 支持的Hive功能 转载请注明出处:http://www.cnblogs.com/BYRans/ Migration Guide 与Hive的兼 ...

  3. Java设计模式学习笔记(观察者模式)

    观察者模式说起来很简单,就是一个订报纸的模式.但是实际上这部分我觉得还是很有意思的,<Head First设计模式>里还有一些还没看完,也是因为理解的不够深吧. 观察者模式会包含两个组件: ...

  4. my_atoi()

    void my_atoi(const char* s){ int i=0,res=0; if(*s<='9' && *s>='0'){ //如果输入的一个字符是数字 for ...

  5. JavaScript中变量提升是语言设计缺陷

    首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确.因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升( ...

  6. JQuery中的extend函数

    1.jQuery.fn.extend(object) 扩展 jQuery 元素集来提供新的方法(通常用来制作插件). 例如:增加两个插件方法. jQuery.fn.extend({ check: fu ...

  7. 使用jlink直接烧norflash或者nandflash不借助uboot的猜想

    由于喜欢折腾,我是在linux下使用jlink的,既然JLinkExe可以进行内存读写操作,loadbin等操作,并且通过指定命令文件支持批量指令输入,那么首先jlink是可以直接访问内部存储器的,包 ...

  8. css实现一个写信的格式

    一.目标 目标实现如下效果: 二.完成 1.分析 这个效果看起来很简单,实际上可能并不那么容易实现. 首先是全部东西都居中显示,除了“亲爱的starof”这个称呼的地方.这也是难点,也是本文要重点说的 ...

  9. Android开发中上线后修改应用名称的若干问题

    一.在Android Studio 1.3中修改app的包名: 需求来源: 之前开发的app已经在腾讯的应用宝上线,应客户要求,app需要改名字,这个就有点麻烦了.如果申请改名字,要求如下: 截图上图 ...

  10. AC日记——二叉树最大宽度和高度 1501 codevs

    1501 二叉树最大宽度和高度  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver     题目描述 Description   给出一个二叉树,输出它的最大宽 ...