OpenStack之Horizon源码架构浅析(二)之启动流程分析(简约版)
来源:互联网 发布:大学生艾滋病数据 编辑:程序博客网 时间:2024/05/18 06:09
horizon启动过程
主要的文件是:
openstack_dashborad.urls.py(OpenStack Dashboard的URL patterns)、
openstack_dashborad.settings.py(配置文件)、
horizon.base.py(基础库)
base.py实现了一套dashboard/panel注册、动态加载机制,使得Horizon面板上所有的dashboard都是”可插拔”的,所有的panel都是”动态加载”的
-1、horizon.base.Site._lazy_urls(self)返回一个函数LazyURLPattern(url_patterns),参数为horizon.base.Site._lazy_urls.url_patterns()方法。
0、开始请求horizon
1、根据Django内部规则,先获取URL,从openstack_dashboard.urls.py中的patterns容器中取到url(r'', include(horizon.urls))。
2、URL认证,设置openstack_auth.urls,include(openstack_auth.urls)时会执行horizon.base.Site._lazy_urls.url_patterns()方法。
3、horizon.base.Site._lazy_urls.url_patterns()方法返回horizon.Site._urls()
4、horizon.base.Site._urls()获取urlpatterns值,使用 horizon.base.HorizonComponent._get_default_urlpatterns(self)方法
5、horizon.base.Site._autodiscover()遍历settings.INSTALLED_APPS发现dashboard和panel,执行每个APP下的dashboard.py和panel.py。
6、horizon.base.Site._autodiscover()把所有获取到的dashboard都注册,存放到_registry中。
注册是openstack_dashboard.dashboards.project.dashboards.py中的horizon.register(Project)注册。
7、dashboard注册过程:horizon.base.Site.register(self, dashboard)使用horizon.base.Registry._register(self, cls)注册一个dashboard类,返回一个类对象并实例化一个dashboard类。
9、horizon.base.Dashborad._autodiscover()迭代panel,转化成PanelGroups并实例化PanelGroups。
加载PanelGroups中的panel,然后注册。
10、panel注册过程:
horizon.base.Dashborad.register(cls, panel)
调用horizon.base.Site.register_panel(self,dashborad,panel),然后加载panel相关的templates,
horizon.base.Site.register_panel(self,dashborad,panel)-->
horizon.base.Site.registered(self,dashborad)-->
horizon.base.Registery._registerd(self,cls)返回一个dashboard对象
panel注册结束.
11、加载基于插件的panel配置,horizon.base.Site._load_panel_customization()以插件为基础的panel配置,支持添加、删除和设置默认面板仪表板。
它还支持注册一个面板组。
它调用horizon.base.Site._conf(self)获取配置,返回里实例化了的horizon.conf.__init__.LazySettings()设置类。
12、根据注册的值,编译动态URLconf配置。
返回urlpatterns, self.namespace, self.slug这三个值,分别是URL、名字、slug。
总结:
开始请求horizon之前先把URL传入,准备好。
请求后,获取urlpatterns值(URL),
根据urlpatterns值获取配置文件中的INSTALLED_APPS容器,
根据容器中的配置注册dashborad,再根据dashborad注册该dashborad下的panel(最复杂的部分)。
最后载入panel的插件和配置。
阅读全文
0 0
- OpenStack之Horizon源码架构浅析(二)之启动流程分析(简约版)
- OpenStack之Horizon源码架构浅析(一)
- Activity启动流程源码分析之Launcher启动(二)
- OpenStack Swift源码分析(2)----swift服务启动源码分析之二
- Service启动流程源码分析之bindService(二)
- 【OpenStack源码分析之三】Nova-Compute启动流程分析
- OpenStack入门之 OpenStack Cloud Administrator Guid(二)Keystone,horizon
- Openstack Horizon开发 (二)
- Openstack -- Horizon二次开发(二)
- Activity启动流程源码分析之startActivity启动(三)
- Openstack --- Horizon之login
- netty源码分析之-ServerBootstrap启动流程分析(3)
- 【OpenStack源码分析之二】RabbitMQ分析
- openstack-horizon/novaclient源码分析
- OpenStack Swift源码分析(3)----swift服务启动源码分析之三
- 二、OpenStack入门 之 架构分析
- OpenStack Cinder源码分析之二
- Activity启动流程源码分析之入门(一)
- 九章算法 第一节 Algorithm Interview & Coding Style
- DataGridView显示Excel表格
- 容器map与set的增删查改
- jQuery控制table进行添加和删除
- 向有序的环形单链表中插入新节点
- OpenStack之Horizon源码架构浅析(二)之启动流程分析(简约版)
- 『 Spark 』10. spark 机器学习
- 微信公号“架构师之路”学习笔记(一)-无限容量数据库架构设计(数据库分组、分片架构等)
- 针对匿名用户ftp服务的一些设定
- install pip3 for python 3.x,在python上安装pip3
- FormData和serialize表单序列化
- 【Ionic】ion-datetime设置初始时间为当前时间及知识点总结;
- 顺序表
- 为什么英语会有主格和宾格之分?比如:I、me