openstack之horizon源码分析

一、基础准备:

  Horizon是基于django webframework开发的标准的Python wsgi程序,django的设计专注于代码的高度可重用,信奉DRY原则,一切面向对象,而Horizon可以说高度match了django的设计风格。网站程序基本有三部分组成,业务逻辑代码(Python),静态文件(js/css),模板(Python中的 jinja,mako,nodejs中有jade), 用户向webserver发起请求之后,server程序找到当前url对应的模板,填充模板变量(输出成字符串形式的html源码),返回给浏览器,浏览器渲染页面。一般模板语言都有继承(extend),插入(include)等特性,来提高页面的复用率。

   Horizon做得就更彻底一些,它将页面上所有元素模块化,网页中一些常见元素,表单,表格,标签页,全部封装成Python类,每个组件有自己 对应的一小块html模板.当渲染整个页面的时候,Horizon先找到当前页面有多少组件,将各个组件分别进行渲染变成一段html片段,最后拼装成一 个完整的html页面,返回浏览器。

总结Horizon的特点:

  • 页面元素模块化
  • 子面板可插
  • All in One(从部署上来说,Horizon只有它自己这一个组件)

二、分析horizon

  1、horizon设计分为三层:Dashboard->PanelGroup->Panel

    a、project普通用户登录后看到的是项目面板

    b、admin管理登录看到可见左测的管理员面板

    c、settings右上角的设置面板

    d、identity不同的角色登录之后,左侧的“身份”面板,可设置项目用户

    e、交换机管理面板

  每个dashboard都是django中的一个app,django中的app可以理解成对业务逻辑模块化的一种手段,里面可以包含自己独有的url设定,模板和业务逻辑代码。每个dashboard下定义了一系列的PanelGroup,虚拟机管理对应到界面上就是一个PanelGroup(ManageCompute),里面有一系列的子panel(Overview、Instance、Volumes...). swift, heat, neutron的管理面板自都是一个PanelGroup,底下有各自的子Panel。

  2、项目结构

    Horizon的源码中,包含两个代码文件夹:

      1、horizon     2、openstack_dashboard

    Horizon这个包是一些在django基础上写的通用组件,表格(table), 标签页(tab),表单(form), 面包屑导航(browser), 工作流(workflow),这些代码和openstack的具体业务逻辑没啥关系,如果做一个新的django项目,理论上可以复用Horizon这个包中的代码。horizon/base.py中还实现了一套dashboard/panel机制,使得Horizon面板上所有的dashboard都是”可插拔”的,所有的panel都是”动态加载”的。

   openstack_dashboard/dashboards/中是各个面板的具体实现代码,其中包括各个面板的模板文件, 和后端service交互的业务逻辑代码等。

   对重要目录做一个介绍,有些目录目前还没有接触到还不清楚具体的作用:

 1 horizon
 2              ./doc: horizon相关帮助性文档
 3              ./horizon:horizon通用组件库
 4                                 ./browsers:
 5                                 ./conf:Horizon配置文件
 6                                 ./contrib:
 7                                 ./forms:form表单基类包
 8                                ./locale:国际化语言包
 9                                ./management:manage.py startdash/startpanel命令
10                                ./static:horizon静态文件包
11                                ./tables:table基类包
12                                ./tabs:tab基类包
13                                ./templates:模板文件基类
14                                ./templatetags:模板标签基类
15                                ./test:测试包
16                                ./utils:工具包
17                                ./workflows:工作流机制包
18              ./openstack_dashboard:horizon各个面板的具体实现代码
19                              ./api:调用nova、swift、glance等接口封装
20                              ./conf:nova、cinder等API访问权限控制,叫 xxx_policy.json,里  面定义了鉴权用的rules。
21                             ./dashboards:Horizon界面展示各个模块实现目录。
22                   ./admin:管理员界面
23                     ./instances:云主机管理界面
24                        ./templates:云主机html界面模板
25                        ./forms.py:form表单实现
26                        ./panel.py:实现panel注册到dashbord
27                        ./tables.py:table实现
28                       ./tests.py:测试
29                       ./urls.py:url映射
30                       ./views.py:url映射的视图
31                  ...32                 ./identity:项目、用户管理界面
33                 ./project:普通用户项目界面
34                 ./router:
35                 ./settings:设置界面
36                             ./django_pyscss_fix:
37                              ./enabled:控制导航加载哪些模块显示出来。
38                              ./local:本地配置文件
39                              ./locale:本地国家化语言包
40                              ./management:定义安装apache、horizon等是配置文件的
41                                                          模板文件。
42                              ./openstack:log、_i18n等包
43                              ./static:horizon静态包
44                             ./templates:horizon模板包
45                              ./templatetags:horizon模板标签包
46                              ./test:测试包
47                              ./usage:Horizon概况页面资源统计实现包
48                              ./utils:工具包
49                              ./wsgi:wsgi包
50              ./tool: horizon工具包
51              ./manage.py :
时间: 2024-10-25 07:52:40

openstack之horizon源码分析的相关文章

horizon源码分析(一)

一.源码分析环境: 本来应该搭建horizon的development环境的,这样方便debug,但是由于各种报错,本人没有搭建成功,这也导致有很多源码疑问没有解决,后续可以继续补充这一部分. 官方搭建方法参考网址:http://docs.openstack.org/developer/horizon/quickstart.html openstack版本:stable-havana 二.源码分析过程中使用的软件: SourceInsight:这个当然是源码分析第一利器,可以进行全局关键字查找,

horizon源码分析(二)

一.简要回顾 对于请求: 地址:/dashboard/admin/instances/ 方式:POST 参数: instances_filter_q: action:instances__soft_reboot__89a8849b-a3cd-4ce0-9158-c3dd69e8508e URL绑定为: openstack_dashboard/dashboards/admin/instances/urls.py 二.目录结构 接下来主要分析 openstack_dashboard/dashboar

horizon源码分析(二)

一.简要回顾 对于请求: 地址:/dashboard/admin/instances/ 方式:POST 参数: instances_filter_q: action:instances__soft_reboot__89a8849b-a3cd-4ce0-9158-c3dd69e8508e ? URL绑定为: openstack_dashboard/dashboards/admin/instances/urls.py ? ? 二.目录结构 ? horizon-------------组件,提供部分功

OpenStack Kolla 源码分析 --Ansible

OpenStack Kolla 源码分析 –Ansible Kolla介绍 Kolla项目利用Docker.Docker-Compose.Ansible来完成部署OpenStack,目前Kolla已经能够完成一个all-in-one的开发环境的部署.从Kolla项目spec中的描述来看,主要是利用Docker容器的隔离性来达到OpenStack的原子升级.回退在升级.整个升级.回退的过程更容易控制影响范围,降低整个OpenStack的运维复杂度.Kolla 提供了生产级别的 OpenStack

OpenStack源码分析——Nova-Scheduler

一.服务启动 Nova-scheduler服务的启动入口脚本是cmd包下的scheduler.py,其主要监听来自于消息队列中topic=scheduler(可配置)的消息.在服务启动过程中,其将初始化一个SchedulerManager实例作为该服务的Handler,来处理接受到的消息请求. 同时,Nova-scheduler服务在启动的过程中,会将自己注册到DB中,即将自己的host.binary.topic.report_count信息添加到services表中,并将自己同样注册到Serv

Openstack liberty 创建实例快照源码分析2

这是创建云主机实例快照源码分析系列的最后一篇,在第一篇文章中分析了从镜像启动云主机,创建在线/离线快照的过程:本篇将分析从启动盘启动的云主机创建快照的过程,下面请看正文: 磁盘启动云主机,离线(在线)快照 nova-api处理过程 函数入口和前述一样,还是 nova/api/openstack/compute/servers.py/ServersController._action_create_image,下面一起来看看: def _action_create_image(self, req,

Openstack liberty源码分析 之 云主机的启动过程3

接上篇Openstack liberty源码分析 之 云主机的启动过程2, 简单回顾下:nova-conductor收到nova-scheduler返回的主机列表后,依次发送异步rpc请求给目标主机的nova-compute服务,下面继续来看nova-compute服务的处理过程: nova-compute 根据路由映射,nova-compute中处理云主机启动请求的方法为 nova/compute/manager.py.ComputeManager.py.build_and_run_insta

openstack swift 源码分析之swift单机部署

本文对在单机部署swift 其中每一个细节做详细的介绍,并对配置做相应的解释 PC物理机    Ubuntu-12.04-desktop-64位 Swift 版本:1.13.1 Swift-client   1.2.0 注意:本文所有操作都是在root权限下进行的. 1 .下载swift 和swift-client 源代码,本文利用git从github获取其源代码 获取swift源代码 git clone https://github.com/openstack/swift.git 获取pyth

Openstack liberty 创建实例快照源码分析1

Openstack liberty中也支持对云主机执行快照,快照是备份系统中一种常用的数据保护技术,在生产系统故障后,能通过快照将系统快速恢复到快照时间点:那Openstack中的云主机快照是否也支持这种故障恢复呢?请看下文: Openstack支持对处于运行或者停止状态的云主机执行快照,另外Openstack既可以从镜像启动云主机,也可以从启动磁盘启动云主机,根据条件组合,可以执行下面4中快照: 镜像启动云主机的离线快照 镜像启动云主机的在线快照 磁盘启动云主机的离线快照 磁盘启动云主机的在线