OpenStackFolsom版本出来也一段时间了,整理了一下界面dashboards项目horizon整体内容,部分节选自计划出版的《云计算与OpenStack》。
在整个OpenStack应用体系框架中,Horizon就是整个应用的入口。他提供了一个模块化的基于WEB的图形化界面服务门户。用户可以通过浏览器使用这个WEBUI来访问、控制控制他们的计算、存储和网络资源,如启动实例,分配IP地址,设置访问控制等。
Horizon为两种角色的用户提供了不同的功能界面:
提供了一个整体视图,可以总揽整个云的资源大小及运行状况。可以创建终端用户和项目,向终端用户分配项目和项目可使用资源的配额管理。
提供了一个自主服务门户,可以在由管理员分配的项目中,在不超过配额限制的范围内,自由操作、使用计算、存储和网络资源。
下面从功能架构、开发架构、和如何定制改造几方面进行剖析。
1. 功能架构
新版本horizon是下面架构图中dashboard,作为OpenStack界面门户统一访问,通过API方式调用各子系统接口。
Horizon主要由三个Dashboard:用户Dashboard、系统Dashboard和设置Dashboard。这三个Dashboard组成了Horizon的核心应用。(下图用户dashboard功能架构)
系统Dashboard和设置Dashboard是为云管理员提供的界面操作功能,可以总揽整个云的资源大小及运行状况。可以创建终端用户和项目,向终端用户分配项目和项目可使用资源的配额管理。用户Dashboard是为终端用户提供的自主服务门户,可以在由管理员分配的项目中,在不超过配额限制的范围内,自由操作、使用计算、存储和网络资源。
2.开发架构
Horizon中有两个主要的app:horizon和openstack_dashboard。
horizonapp中定义了两个非常重要的对象:Dashboard和Panel。以及其他的一些界面展示相关的对象,比如form、table、tabs等。
Dashboard和Panel分别都是Django的app,在horizonapp中定义了这两种对象app。从Dashboardapp派生出来的app提供了顶级导航菜单相关页面。而Panel则是在Dashboard下的二级导航菜单相关页面。
openstack_dashboardapp中则是注册了其他所有操作功能的app,可以看出有syspanel(管理员),nova(普通终端用户)、settings(设置)3个dashboard。
之后在nova里面instances对应虚拟机管理,volumes对应弹性硬盘EBS
国内大多企业公司部署使用OpenStack更多是应用,使用而不是大幅改造,定制属于自己特色的界面,可以通过修改标题、logo等简单应用实现。
Horizon WEB应用的默认标题是“OpenStack Dashboard”。通过在local_settings.py文件中添加属性“SITE_BRANDING”可以覆盖这个默认值。
Horizon中的OpenStack的logo是放置在style.css文件中的。
#splash .modal { background: #fff url(../images/logo.png) no-repeat center35px;
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”。
如果你想要为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") |
自从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-getinstall gettext”。
重启apache,重新访问即可。