您的位置:首页 > 运维架构 > 网站架构

folsom版本horizon架构剖析

2012-11-05 08:34 197 查看
OpenStack Folsom版本出来也一段时间了,整理了一下界面dashboards项目horizon整体内容,部分节选自计划出版的《云计算与OpenStack》。

在整个OpenStack应用体系框架中,Horizon就是整个应用的入口。他提供了一个模块化的基于WEB的图形化界面服务门户。用户可以通过浏览器使用这个WEB UI来访问、控制控制他们的计算、存储和网络资源,如启动实例,分配IP地址,设置访问控制等。

Horizon为两种角色的用户提供了不同的功能界面:

云管理员

提供了一个整体视图,可以总揽整个云的资源大小及运行状况。可以创建终端用户和项目,向终端用户分配项目和项目可使用资源的配额管理。

终端用户

提供了一个自主服务门户,可以在由管理员分配的项目中,在不超过配额限制的范围内,自由操作、使用计算、存储和网络资源。

下面从功能架构、开发架构、和如何定制改造几方面进行剖析。

1. 功能架构

新版本horizon是下面架构图中dashboard,作为OpenStack界面门户统一访问,通过API方式调用各子系统接口。





Horizon主要由三个Dashboard:用户Dashboard、系统Dashboard和设置Dashboard。这三个Dashboard组成了Horizon的核心应用。(下图用户dashboard功能架构)





系统Dashboard和设置Dashboard是为云管理员提供的界面操作功能,可以总揽整个云的资源大小及运行状况。可以创建终端用户和项目,向终端用户分配项目和项目可使用资源的配额管理。用户Dashboard是为终端用户提供的自主服务门户,可以在由管理员分配的项目中,在不超过配额限制的范围内,自由操作、使用计算、存储和网络资源。

2.开发架构

Horizon中有两个主要的app:horizon和openstack_dashboard。

horizon app中定义了两个非常重要的对象:Dashboard和Panel。以及其他的一些界面展示相关的对象,比如form、table、tabs等。

Dashboard和Panel分别都是Django的app,在horizon app中定义了这两种对象app。从Dashboard app派生出来的app提供了顶级导航菜单相关页面。而Panel则是在Dashboard下的二级导航菜单相关页面。







openstack_dashboard app中则是注册了其他所有操作功能的app,可以看出有syspanel(管理员),nova(普通终端用户)、settings(设置)3个dashboard。





之后在nova里面instances对应虚拟机管理,volumes对应弹性硬盘EBS






3定制Horizon

国内大多企业公司部署使用OpenStack更多是应用,使用而不是大幅改造,定制属于自己特色的界面,可以通过修改标题、logo等简单应用实现。


3.1修改WEB应用的标题

Horizon WEB应用的默认标题是“OpenStack Dashboard”。通过在local_settings.py 文件中添加属性“SITE_BRANDING”可以覆盖这个默认值。


3.2修改Horizon的logo

Horizon中的OpenStack的logo是放置在style.css文件中的。

#splash .modal {

background: #fff url(../images/logo.png) no-repeat center 35px;

h1.brand a {

background: url(../images/logo.png) top left no-repeat;
OpenStack的logo文件是放在” horizon/openstack-dashboard/dashboard/static/dashboard/images/logo.png”路径下的。替换这个文件就可以了。

Logo文件的大小是:“width: 108px, height: 121px”。


3.3 修改Dashboard和Panel

如果你想要为Horizon增加一个模块,可以在settings.py中为” HORIZON_CONFIG”参数增加一个” customization_module”属性,值为新python模块的完整包路径即可。

例如:

HORIZON_CONFIG = {

"customization_module": "my_project.overrides"

}
原则上你可以定制这个模块的任何内容,比如修改Panel的标题:

from django.utils.translation import ugettext_lazy as _

import horizon

# Rename "OpenStack Credentials" to "OS Credentials"

settings = horizon.get_dashboard("settings")

project_panel = settings.get_panel("project")

project_panel.name = _("OS Credentials")


3.4 国际化

自从Folsom版本之后,Horizon已经支持汉化,有部分翻译没有完全做好,可以进一步汉化。Horizon的汉化还是比较简单的,根据django框架增加和修改对应的国际化属性文件就可以了。安装完毕folsom后可以通过2个目录找到horizon

/usr/share/openstack_dashboard

/usr/lib/python2.7/dist-packags/horizon
基本上修改locale中的po文件,例如:

/horizon-2012.2/horizon/locale/zh_CN/LC_MESSAGES/django.po

/horizon-2012.2/horizon/locale/zh_CN/LC_MESSAGES/djangojs.po
基于UTF-8 unix文本模式下编辑对应的标签:

#: dashboards/nova/images_and_snapshots/templates/images_and_snapshots/images/_update.html:7

#: dashboards/nova/images_and_snapshots/templates/images_and_snapshots/images/_update.html:22

#: dashboards/nova/images_and_snapshots/templates/images_and_snapshots/images/update.html:3

#: dashboards/nova/images_and_snapshots/templates/images_and_snapshots/images/update.html:6

#: dashboards/syspanel/images/templates/images/_update.html:8

#: dashboards/syspanel/images/templates/images/_update.html:23

#: dashboards/syspanel/images/templates/images/update.html:4

#: dashboards/syspanel/images/templates/images/update.html:7

msgid "Update Image"

msgstr "更新镜像"
之后在项目应用目录通过” django-admin compilemessages”命令编译po文件,生成对应的mo文件:

root@essex1:/usr/lib/python2.7/dist-packages/horizon# django-admin compilemessages

processing file django.po in /usr/lib/python2.7/dist-packages/horizon/locale/es/LC_MESSAGES

processing file django.po in /usr/lib/python2.7/dist-packages/horizon/locale/zh_TW/LC_MESSAGES

processing file django.po in /usr/lib/python2.7/dist-packages/horizon/locale/pl/LC_MESSAGES

processing file django.po in /usr/lib/python2.7/dist-packages/horizon/locale/pt/LC_MESSAGES

processing file django.po in /usr/lib/python2.7/dist-packages/horizon/locale/fr/LC_MESSAGES

processing file django.po in /usr/lib/python2.7/dist-packages/horizon/locale/ja/LC_MESSAGES

processing file django.po in /usr/lib/python2.7/dist-packages/horizon/locale/zh_CN/LC_MESSAGES
如果报错:“sh: 1: msgfmt: not found”,请安装gettext,如在ubuntu执行:“apt-get install gettext”。

重启apache,重新访问即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: