Horizon汉化与修改_第1页
Horizon汉化与修改_第2页
Horizon汉化与修改_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Horizon汉化与订制、环境简介整个平台名称为 Havstack :Control 节点:包含全部效劳, keystone、mysql、vlan、rabbitmq、glanee、openvswitch、 neutron 、 kvm> cinder 禾口 horizon 。Compute 节点: 仅包含计算所需效劳, vlan、nova、kvm、ope nvswitch 禾口 n eutr on-age nt 。、Horizon汉化与完善1、Django国际化简介Django国际化的本质就是开发者对需要翻译的字符串进行标记,并对字符串进行相应的翻译。当用户访问该Web 时,DjangoP

2、ytho n部框架根据用户使用偏好进行Web呈现。Django国际化使用的翻译模块是自带的gettext标准模块。其中,主要的4个翻译字符串的函数为:指定一个翻译字符串,一般都用于djan go.utils.tra nslati on. ugettext()views.pydjan go.utils.tra nslati on. gettext_ no op():标记一个不需要立即翻译的字符串这个串会稍后从变量翻译。使用这种方法的环境是,有字符串必须以原始语言的形式存储如储存在数据库中的字符串而在最后需要被翻译出来如显示给用户时 :将字符串作为惰性参照存储,而不是实际翻译,一般会用于model

3、s.py。翻译工作将在字符串在字符串上下文中被用 到时进行,比方在Django管理页面提交模板时。在Django模型中总是无一例外的 使用惰性翻译。:函数包括三个参数:单数形式的翻译字符串,复数形式的翻译字符串,和对象的个数将以 count变量传递给需要翻译 的语言。2、Horizon汉化步骤由于Horizon汉化并不完全,而且很多地方翻译不合理,同时Havstack在于创立桌面云,而OpenStack的主旨是创立效劳器虚拟化, 所以我们有必要对 OpenStack中很多地方进 行重新汉化。汉化步骤:1将 Control 节点:/usr/share/ope nstack-dashboard/o

4、pe nstack_dashboard/locale/zh_CN/LC_MESSAGES/ 目录下的 django.po 禾口 django.mo进行备份。2直接编辑django.po文件,该文件容类似于#: views.py:12msgid "Mon day"msgstr "星期一 #为前缀的行起注释作用,并指示出待翻译的文件所在的具体位置。msgid是在源文件中出现的待翻译字符串。msgstr是相应语言的翻译结果,注意语句前后都有引号。我们所需要修改的就是msgstr后面的容,最后保存即可。3) 安装软件gettext。然后执行指令:msgfmt -stati

5、stics -verbose -o djan go.mo djan go.po重新生成django.mo文件,该文件即为Horizon所用的信息文件。4) 之后执行命令:In -s/usr/share/pyshared/horizo n/locale/zh_CN/LC_MESSAGES/dja ngo.mo/usr/lib/pytho n2.7/dist-packages/horizo n/locale/zh_CN/LC_MESSAGES/dja ngo.mo生成django.mo文件的软连接。5) 最后重启apache2效劳即可在Horizon上看到修改的效果。service apache2

6、 restart三、Horizon界面图标修改需要修改的局部大致分为三个局部:登录界面,主界面和状态栏。登录界面登录界面图标位于:/usr/share/ope nstack-dashboard/ope nstack_dashboard/static/dashboard/img/logo.p ng相应的配置文档为:/usr/share/ope nstack-dashboard/ope nstack_dashboard/static/dashboard/less/horizon.l ess有两种修改方式,第一种为直接替换掉logo.png,第二种是修改horizon.less 文件中的backgr

7、ound: url(/static/dashboard/img/logo.png)语句,将地址修改为新图标的地址。主页面主界面图标位于:/usr/share/ope nstack-dashboard/ope nstack_dashboard/static/dashboard/img/logo-splash.p ng相应的配置文档为:/usr/share/ope nstack-dashboard/ope nstack_dashboard/static/dashboard/less/horizon.l ess有两种修改方式,第一种为直接替换掉logo-splash.png,第二种是修改horizo

8、n.less文件中的 background: #fff url(/static/dashboard/img/logo-splash.png)语句,将地址修改为新图标的地址。状态栏状态栏需要修改状态栏小标识以与显示名称。1) 修改状态栏图标状态栏图标位于:/usr/share/ope nstack-dashboard/ope nstack_dashboard/static/dashboard/img/favicon .ico相应的配置文档为:/usr/share/ope nstack-dashboard/ope nstack_dashboard/templates/_stylesheets.h

9、tml同样可 以直接替换favico n.ico 图标,或者修改_stylesheets.html 文件中 STATIC_URL dashboard/img/favico n. ico语句,将地址改为新图标的地址。2) 修改状态栏显示名称修改文件:/usr/share/ope nstack-dashboard/ope nstack_dashboard/sett in gs.py中的SITE_BRANDING = 'OpenStack Dashboard' 将 OpenStack Dashboard 换为其他名称,例 如 GuoFU四、对Horizon增加新功能当前Horizon

10、并没有涵盖所有nova支持的功能,而且对于桌面云用户来说还需增加诸 多功能。以下通过增加实例启动源选择和添加挂载CD两个功能来介绍局部Horizon工作流程。1、增加实例启动源选择增加该功能的意义在于对于以iso的格式为镜像创立的实例,创立好的快照不能让其它的实例作为镜像正常启动。根本原因在于nova底层的代码对于创立快照时,所选择的根磁盘或临时磁盘存在问题。因此我们在创立实例时,就把以iso镜像格式创立的实例标识出来, 以防止后期创立快照时的失败。基于此目的,我们需要将 Horizon上启动一个新实例时,“选择启动源中中新增一个 启动源“从CD启动,该选项用于选择所有镜像格式为 iso的文件

11、,并把默认的“从镜像启 动中格式为iso的镜像去除掉。在进行开发前,需要对Horizon简要说明。Horizon 的设计分为三层:Dashboard 宀 PanelGroup 宀 Panel。Horizon 中现有四个 Dashboard :a) project:普通用户登陆后看到的工程面板b) admin :管理登陆后可见,左侧的管理员面板c) settings:右上角的设置面板,里面可设置语言,时区,更改密码d) router :(配置文件中将 profile_support翻开可见),ciso nexus 1000v 的管理面板每一个dashboard都是django中的一个app, d

12、jango中的app可以理解成对业务逻辑 模块化的一种手段,里面可以包含自己独有的url设定、模板和业务逻辑代码。每个dashboard 下 定义了一系列的Pan elGroup ,虚拟机管理对应到界面上就是一个 PanelGroup(Manage Compute),里面有一系列的子 panel(Overview, Instances, , Volumes等)。Swift , heat, neutron的管理面板各自都是一个PanelGroup ,底下有各自的子 panel。在Horizon的源码中,包含两个代码文件夹:1) horizon这个包是一些在 django根底上写的通用组件,表格(

13、table)、标签页(tab)、表单(form)、 导航(browser)和工作流(workflow),这些代码和 OpenStack的具体业务逻辑没有什么关系,可以复用这个包中的代码。horiz on/base.py中实现了一套dashboard/pa nel机制,使得Horizon面板上所有的dashboard都是“可插拔的,所有的panel都是“动态加载的。2) openstack_dashboard这个包中重要的代码都在openstack_dashboard/dashboards/下,它是各个面板的具体实现代码,其中包括各个面板的模板文件和后端service交互的业务逻辑代码等。接下来

14、完成添加实例启动源选择。在in sta nces这个文件夹下,urls.py 中url(r®aunch$',views.LaunchinstanceView.as_view(),name='launch')可 以看出launch 这个动作会进入 views.py 的 LaunchinstanceView 这个类,这了类的 workflow_class =project_workflows.Launchinstanee贝U指向了 workflow。启动实例这个过程是通过workflow 来实现的,其过程大体分为workflow、step和action,接下来通过

15、以边修改边介绍的形式进行。核心代码位于:dashboards/project/i nsta nces/workflows/create_i nsta nce.pyA) step修改启动云主机这个表单共有四个step,分别是“详情、“访问&控制、“网络和“创立后,代码中分别对应于 SetinstanceDetails、SetAccessControls、SetNetwork 和PostCreationStep 这4个类,它们都继承于 workflows.Step 。其实在代码中,还有一个step 是SelectProjectUser ,这个step通过之前的登录来完成,故我们不去考虑。一

16、个step是用于定义action中的数据并且封装起来以供 workflow来使用。每个step 中有以下局部:a) action_class:用于指出该 step 所对应的 action 。b) depends_on :定义所依赖的字段,例如,("project_id", "user_id"),假设没有依赖,那么不用写。c) co ntributes :列出的容用于 con tribute函数返回到 workflow 的共享容中去,例如,("source_type", "source_id","avail

17、ability_zone", "name", "count", "flavor","device_ name", "delete _on _termi nate")。可以看到,“选择启动源是在Set in sta nceDetails这个类中,而添加启动源应该只在 这个类中修改,因此之后我们只拿这个类来说明。我们添加新字段“ cd_id 用于标识用户所选择的 iso镜像,先将 cd_id添加到 con tributes 中。在con tribute 函数中,source_id 会根据所

18、选择的不同类型生成, 而新增 的cdd 和image_id 同类型,因此我们将cdd添加到if data"source_type" in"image_id", "volume_image_id"里面,"image_id","cdd", "volume_image_id" <至此,对于step的修改就完成了。B) action 修改对应于每个step ,都会有一个action ,在此我们需要修改的是Seti nsta nceDetailsActi on这个类,可以看到它是

19、继承于workflows.Actio n。一个action代表一个可以和系统进行的原子逻辑操作。譬如在创立实例这个 workflow 中,action可以是给实例命名、选择镜像,最终创立实例。由于action是可以交互的,所以它必然包括一些表单,这些表单都是继承于Django' s Form类。在这个类的开始,我们可以看到很多的forms.ChoiceField,显然这就是在“详情这个表单中诸多的选择框,我们添加cdd = forms.ChoiceField(label=_("CD Name"), required=False),在这里添加的位置还是很有玄机的,稳妥

20、的方法就是添加到最后。有了选择CD的框,当然还得有何时出现这个框以与这个框中的选项。在SetlnstanceDetailsAction这个类的初始化函数中,_init_ ,我们可以找到source_type_choices这个字段,其后是一个列表,保存着 image_id、volume_id 等,显然要想让cdd可以通过“选择启动源显示出来,需要添加("cd_id", _("Boot from CD.")。在之后有个clean函数,通过简单阅读可以得知它的目的在于判断输入的一些不合法并 且让假设选择了 image_id,就不能让该值提交的时候为空,由此我

21、们仿照 image_id的判断, 写一个cdd的。之后的函数都很有规律,populate_#_choices,显然我们找到了产生选项的函数。依照image_id 的选项,我们写一个populate_cdd_choices,修改 choice 字段,choices = (image.id, )for image in imagesif image.disk_format = "iso", 实现从镜像中选择出格式为iso的。为了区分,将 image_id 中的 choice 改为 choices = (image.id,)for imag

22、ein imagesif image.disk_format != "iso"。这样,action就修改完毕。由于workflow是最后提交时触发,所以当前修改的代码应该已经可以完成在页面上的 展示,但实际运行发现会无法显示出选择框。因为我们还需要修改js。该文件位于:/usr/share/pyshared/horiz on/static/horiz on/js/horiz on .i nsta nces.js在一个switch 语句按照image_id的添加cdd的显示即可。最后看一下 $this.closest(".control-group").n

23、extAII().hide()语句,它指明了哪些框初始就不显示,而在动态选择时显示。取镜像列表流程:语句为:images=utils.get_available_images(request,con text.get('project_id'),self._images_cache)跳 转 至 Udashboards/project/images_a nd_sn apshot/utils.py的get_available_images 方法,返回该用户可用的镜像列表,由私有镜像和共有镜像组成。两类镜像列表都是通过glance.image_list_detailed获得。跳转到o

24、penstack_dashboards/api/glance.py, 方 法 image_list_detailed 。 最 终通过glanceclient(request).images.list获得,转至U代码 glanceclient/v1/images.py的 list方法,显示出用户可用镜像列表。C) workflow 修改最后我们来看 Lau nchl nsta nee 这个类,它继承于 workflows.Workflow 。workflow是step的集合,用以控制 step顺序,连接各个step并确保可以相互调用容 数据,并最终验证数据的完整性和引发最后一个方法来完成整个wo

25、rkflow。其中有个default_steps 字段,用以控制 step顺序流。这里需要增加source_type 的类型选择,当其等于cd_id时,使得cdd = context'source_id'。最后可以看出,真正创立实例的语句是 api.nova.server_create,调用api中的nova来实现实例的创立,假设想最终成功区分iso 镜像,需要在nova里新增cd_id 字段,并在 workflow 的 api.nova.server_create中增力口 cd_id 。创立实例的流程:create将会进行如下检测:1查看这种类型的instanee是否到达最大

26、值;2如果不 存在平安组,就创立一个; 3生成MAC地址和host name ; 4 给scheduler发送一个消息 去运行这个实例。scheduler收到消息后通过默认策略选择一个目的host,并将消息发送到目的主机的nova-computer。收至U消 息后,computer 做一系列 工作,代码在 nova/compute/manager.py 里 的 _build_instanee方法。并让 networker 去准备一个ip,让volume准备卷,然后初始化相应的信息。nova-network 为实例分配固定 IP,代码在 nova/network/manager.py。nova-

27、volume 为实例分配卷,代码在nova/volume/cinder.py。最后回 至U no va-computer , 代码在 no va/virt/libvirt/driver.py,_create_domain_and_network 禾口 spawn 方法。通过 libvirt xml文件,然后根据 xml 文件生成 instanee ;准备 network filter ,默认的 fierwall driver 是 iptables ;仓U建 domain, 放入running pool 并启动。2、挂载CD该功能为了实现将一个iso镜像格式的文件挂载到实例中,类似于在实体电脑中插入光盘。该功能对于新建的实例让假设没有驱动等问题, 可以通过这个功能动态的加载,而不需要重新制作镜像。该功能出现在显示用户所有实例列表页面,每行实例最后都会有一个功能按钮, 譬如创建快照、分配浮动IP等。我们需要在这里增加一个动作,叫做“挂载CD。文件目录位于 dashboards/project/i nsta nces/下。1修改 urls.py在urls.py文件中,为了使新增功能有入口,需要添加urlINSTANCES % 'loadCD', n ame='loadCD'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论