Horizon学习笔记

云计算Openstack Horizon OpenStack是一个开源的云计算平台,提供了构建和管理云计算环境所需的软件工具。而Horizon则是OpenStack的一个关键组件,它是基于Web的用户界面,为用户提供了一种直观、便捷的方式来管理和使用OpenStack资源。 阅读详情

Horizon吊炸天!之前,一直认为horizon只不过是一个面板,没啥好研究的,而且我对django又不是很熟,一直懒的看horizon,今晚硬着头皮看了下去,没想到,越看越有劲,眼睛差点跟不上我的思路了!我觉得horizon牛不在对django的运用,而是对事物高度的抽象能力:D


程序的入口点在horizon/openstack_dashboard/urls.py中:

url(r'', include(horizon.urls))


然后由Horizon这个单例的Site对象,开始加载urls,自动发现并注册dashboard,然后对每一个dashboard,再自动发现并注册panel:

Horizon._lazy_url

程序的入口看起来那么平常不过,进入之后发现这大千世界,让人惊叹不已!!!




可以在horizon/base/_urls()方法中,一窥全貌:

```
    def _urls(self):  
        """Constructs the URLconf for Horizon from registered Dashboards."""
        urlpatterns = self._get_default_urlpatterns()
        self._autodiscover() # 自动发现并注册dashboard,其实就是从INSTALL_APPS中加载dashboard
        
        # Discover each dashboard's panels.
        for dash in self._registry.values():
            dash._autodiscover()  # 自动发现并注册panel,这个是根据路径来发现的
            
        # Allow for override modules
        if self._conf.get("customization_module", None):
            customization_module = self._conf["customization_module"]
            bits = customization_module.split('.')
            mod_name = bits.pop()
            package = '.'.join(bits)
            mod = import_module(package)
            try: 
                before_import_registry = copy.copy(self._registry)
                import_module('%s.%s' % (package, mod_name))
            except Exception:
                self._registry = before_import_registry
                if module_has_submodule(mod, mod_name):
                    raise
                 
        # Compile the dynamic urlconf.
        for dash in self._registry.values():
            urlpatterns += patterns('',
                    url(r'^%s/' % dash.slug, include(dash._decorated_urls)))
                    
        # Return the three arguments to django.conf.urls.defaults.include
        return urlpatterns, self.namespace, self.slug
```

默认的,一个HorizonSite中有三个Dashboard: project, admin, setting,在HorizonSite的autodiscover过程中,注册在HorizonSite中:
```
(Pdb) pp self._registry
{<class 'openstack_dashboard.dashboards.project.dashboard.Project'>: <Dashboard: project>,
 <class 'openstack_dashboard.dashboards.admin.dashboard.Admin'>: <Dashboard: admin>,
 <class 'openstack_dashboard.dashboards.settings.dashboard.Settings'>: <Dashboard: settings>}
```

然后再对每一个Dashboard进行autodiscover,将Panel注册在Dashboard中,从上面的类图中可以看到Dashboard和HorizonSite都是Registry的子类,它们都具有**注册**的能力:
```
(Pdb) pp self._registry.values()[0]._registry
{<class 'openstack_dashboard.dashboards.project.overview.panel.Overview'>: <Panel: overview>,
 <class 'openstack_dashboard.dashboards.project.containers.panel.Containers'>: <Panel: containers>,
 <class 'openstack_dashboard.dashboards.project.instances.panel.Instances'>: <Panel: instances>,
 <class 'openstack_dashboard.dashboards.project.network_topology.panel.NetworkTopology'>: <Panel: network_topology>,
 <class 'openstack_dashboard.dashboards.project.images_and_snapshots.panel.ImagesAndSnapshots'>: <Panel: images_and_snapshots>,
 <class 'openstack_dashboard.dashboards.project.networks.panel.Networks'>: <Panel: networks>,
 <class 'openstack_dashboard.dashboards.project.access_and_security.panel.AccessAndSecurity'>: <Panel: access_and_security>,
 <class 'openstack_dashboard.dashboards.project.firewalls.panel.Firewall'>: <Panel: firewalls>,
 <class 'openstack_dashboard.dashboards.project.volumes.panel.Volumes'>: <Panel: volumes>,
 <class 'openstack_dashboard.dashboards.project.routers.panel.Routers'>: <Panel: routers>,
 <class 'openstack_dashboard.dashboards.project.loadbalancers.panel.LoadBalancer'>: <Panel: loadbalancers>,
 <class 'openstack_dashboard.dashboards.project.vpn.panel.VPN'>: <Panel: vpn>,
 <class 'openstack_dashboard.dashboards.project.database_backups.panel.Backups'>: <Panel: database_backups>,
 <class 'openstack_dashboard.dashboards.project.stacks.panel.Stacks'>: <Panel: stacks>,
 <class 'openstack_dashboard.dashboards.project.databases.panel.Databases'>: <Panel: databases>}
```

在注册每一个Panel的时候,还会将每一个Panel的template路径,保存到loaders模块中:
```
(Pdb) pp loaders.panel_template_dirs
{'admin/defaults': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/defaults/templates',
 'admin/flavors': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/flavors/templates',
 'admin/hypervisors': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/hypervisors/templates',
 'admin/images': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/images/templates',
 'admin/info': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/info/templates',
 'admin/instances': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/instances/templates',
 'admin/metering': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/metering/templates',
 'admin/networks': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/networks/templates',
 'admin/overview': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/overview/templates',
 'admin/projects': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/projects/templates',
 'admin/routers': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/routers/templates',
 'admin/users': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/users/templates',
 'admin/volumes': '/opt/stack/horizon/openstack_dashboard/dashboards/admin/volumes/templates',
 'project/access_and_security': '/opt/stack/horizon/openstack_dashboard/dashboards/project/access_and_security/templates',
 'project/containers': '/opt/stack/horizon/openstack_dashboard/dashboards/project/containers/templates',
 'project/database_backups': '/opt/stack/horizon/openstack_dashboard/dashboards/project/database_backups/templates',
 'project/databases': '/opt/stack/horizon/openstack_dashboard/dashboards/project/databases/templates',
 'project/firewalls': '/opt/stack/horizon/openstack_dashboard/dashboards/project/firewalls/templates',
 'project/images_and_snapshots': '/opt/stack/horizon/openstack_dashboard/dashboards/project/images_and_snapshots/templates',
 'project/instances': '/opt/stack/horizon/openstack_dashboard/dashboards/project/instances/templates',
 'project/loadbalancers': '/opt/stack/horizon/openstack_dashboard/dashboards/project/loadbalancers/templates',
 'project/network_topology': '/opt/stack/horizon/openstack_dashboard/dashboards/project/network_topology/templates',
 'project/networks': '/opt/stack/horizon/openstack_dashboard/dashboards/project/networks/templates',
 'project/overview': '/opt/stack/horizon/openstack_dashboard/dashboards/project/overview/templates',
 'project/routers': '/opt/stack/horizon/openstack_dashboard/dashboards/project/routers/templates',
 'project/stacks': '/opt/stack/horizon/openstack_dashboard/dashboards/project/stacks/templates',
 'project/volumes': '/opt/stack/horizon/openstack_dashboard/dashboards/project/volumes/templates',
 'project/vpn': '/opt/stack/horizon/openstack_dashboard/dashboards/project/vpn/templates',
 'settings/password': '/opt/stack/horizon/openstack_dashboard/dashboards/settings/password/templates',
 'settings/user': '/opt/stack/horizon/openstack_dashboard/dashboards/settings/user/templates'}
```

接下来就是最关键的urlpatterns,整个horizon所有的路径,并不是写到一个url.py文件中的,而是分散在每一个dashboard, 每一个panel中,有层级的关系。首先找dashboard的url,到每一个dashboard,再找每一个panel的url,所以url的路径关系为: ./dashboard/panel
urlpatterns in site:
```
(Pdb) pp urlpatterns
[<RegexURLPattern user_home ^home/$>,
 <RegexURLPattern jsi18n ^i18n/js/(?P<packages>\S+?)/$>,
 <RegexURLPattern set_language ^i18n/setlang/$>,
 <RegexURLResolver <module 'django.conf.urls.i18n' from '/usr/local/lib/python2.7/dist-packages/django/conf/urls/i18n.pyc'> (None:None) ^i18n/>,
 <RegexURLPattern qunit_tests ^qunit/$>,
 <RegexURLResolver <RegexURLResolver list> (admin:admin) ^admin/>,
 <RegexURLResolver <RegexURLResolver list> (settings:settings) ^settings/>,
 <RegexURLResolver <RegexURLResolver list> (project:project) ^project/>]
```


urlpatterns in dashboard
```
(Pdb) pp urlpatterns[-1].urlconf_name
[<RegexURLResolver <RegexURLPattern list> (instances:instances) ^instances/>,
 <RegexURLResolver <RegexURLPattern list> (routers:routers) ^routers/>,
 <RegexURLResolver <RegexURLPattern list> (databases:databases) ^databases/>,
 <RegexURLResolver <RegexURLPattern list> (firewalls:firewalls) ^firewalls/>,
 <RegexURLResolver <RegexURLPattern list> (containers:containers) ^containers/>,
 <RegexURLResolver <RegexURLPattern list> (access_and_security:access_and_security) ^access_and_security/>,
 <RegexURLResolver <RegexURLPattern list> (network_topology:network_topology) ^network_topology/>,
 <RegexURLResolver <RegexURLPattern list> (database_backups:database_backups) ^database_backups/>,
 <RegexURLResolver <RegexURLPattern list> (loadbalancers:loadbalancers) ^loadbalancers/>,
 <RegexURLResolver <RegexURLPattern list> (vpn:vpn) ^vpn/>,
 <RegexURLResolver <RegexURLPattern list> (volumes:volumes) ^volumes/>,
 <RegexURLResolver <RegexURLPattern list> (stacks:stacks) ^stacks/>,
 <RegexURLResolver <RegexURLPattern list> (networks:networks) ^networks/>,
 <RegexURLResolver <RegexURLPattern list> (images_and_snapshots:images_and_snapshots) ^images_and_snapshots/>,
 <RegexURLResolver <RegexURLPattern list> (overview:overview) >]
```


urlpatterns in panel
```
(Pdb) pp urlpatterns[-1].urlconf_name[-1].urlconf_name
[<RegexURLPattern index ^$>, <RegexURLPattern warning ^warning$>]
```


Openstack架构构建及详解(6)--Dashboard组件,java单例模式面试题 如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了《Java中高级核心知识全面解析》[外链图片转存中…(img-nkEJSYYa-1711151280226)]本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录。 阅读详情

相关推荐

VMware Horizon 7 安装部署教程

一.VMware Horizon 7介绍通过Horizon,IT部门可以在数据中心部署虚拟化环境,并将这些环境交付给员工。最终用户可以获得熟悉的个性化环境,并且可以在企业或家庭网络中的任何地方访问此环境。将桌面数据全部至于数据中心,管理员可以进行集中式管理,同时还能提高效率、增强安全性、降低成本(用户可以使用落后的PC或瘦客户机访问虚拟桌面环境)。二.VMware H...

weixin_33938733的博客 7336

Horizon 源码阅读(一)—— Horizon 整体介绍

一、写在前面        这篇文章主要介绍一下Openstack Horizon — juno项目的整体情况,关于这方面的内容网上已经有很多相关的介绍,我在这里只作为一个知识的搬运工,把一些分散的内容加上个人的理解形成一篇介绍性博文,由于能力和时间有限,错误之处在所难免,欢迎指正! 如果转载,请保留作者信息。 邮箱地址:jpzhang.ht@gmail.com 二、Horizon

JP.Zhang 7122

超详细 VMware Horizon 虚拟桌面VDI安装步骤

主要的目的是模拟生产环境中的共享存储。自动桌面相当于共享电脑,大家使用同一个虚拟机,对虚拟机的修改都放在用户的配置文件中,RDS桌面池相当于共享的服务器,可以多人同时连接到服务器上。1:之前已经建立好了NFS的存储,这部分配置好后,以后的虚拟机可以安装到NFS的存储中。2: 使用Composer发布系统可以解决SID,机器名冲突的问题,更重要的可以节约磁盘空间,发布的所有系统可以访问一块磁盘。26: 域选择我们之前建立的域,用户名我输入的是管理员,可以在AD域新建用户点击查找,我这里用的是管理员。

vv12345的博客 1万+

horizon服务

一、horizon 介绍: 理解horizon Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 , 管理员可以使用通过 WEB UI 对 Openstack 整体云环境进行管理 , 并可直观看到各种操作结果与运行状态。 DashBoard 与其他组件的关系 登陆 Dashboard...

weixin_34259232的博客 1087

horizon— Web管理界面

Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 , 管理员可以使用通过 WEB UI 对 Openstack 整体云环境进行管理 , 并可直观看到各种操作结果与运行状态。 登陆 Dashboard 界面 启动客户端浏览器,于地址栏输入:http://Horizone_...

Sky_fantasy_的博客 2929

horizon源码

openstack中关于horizon源码

horizon学习小结

1、写在前面                 工作中

晓飞趋势 2210

电价预测的Transformer实战:从注意力机制到超长序列建模

本文深入探讨了Transformer模型在电价预测领域的实战应用,对比了其与LSTM在处理长序列依赖和误差累积问题上的优劣。文章详细解析了自注意力机制的原理,并提供了处理超长序列的位置编码方法、构建专用预测模型的完整PyTorch代码,以及防止信息泄露的关键技巧。通过实战对比,展示了Transformer在并行计算、长距离建模和预测精度上的显著优势,并分享了应对极端波动和提升模型效率的高级优化策略。

f6g7h8i9j的博客 540

【亲测免费】 Horizon:一站式云原生应用生命周期管理平台

Horizon:一站式云原生应用生命周期管理平台 项目介绍 Horizon 是一个基于 Kubernetes 的云原生应用生命周期管理平台。它旨在提供一套完整且高效的工具集,帮助开发者和运维团队轻松地部署、管理和迭代应用。通过集成 CI/CD 流水线、应用模板、以及对多环境的支持,Horizon 实现了从代码到生产环境的一键式部署,大大简化了企业级应用开发的复杂度。 项目快速启动 环境准备 确保...

gitblog_00908的博客 1125

基于NXP i.MX RT1180的无传感器FOC电机驱动实战指南

磁场定向控制(FOC)是一种先进的电机控制技术,它通过精密的数学变换,将三相交流电机的控制解耦为独立的转矩和磁场分量,从而实现高效、平稳、低噪音的驱动。其核心原理在于利用Park/Clark变换,在旋转坐标系下对电流进行线性控制。这项技术的价值在于显著提升了永磁同步电机(PMSM)的效率与动态性能,广泛应用于机器人、无人机和工业自动化等高精度场景。本文聚焦于利用NXP i.MX RT1180跨界处理器及其MCUXpresso SDK,快速实现一套完整的无传感器FOC解决方案。通过解析硬件平台选型、软件架构,

weixin_33925615的博客 305

F5 GTM DNS 实战指南:智能DNS的监控与健康检查机制

本文深入解析F5 BIG-IP GTM智能DNS的核心机制,重点阐述其监控与探针两大功能如何协同工作。监控器负责深度检查服务器应用健康,确保服务可用性;探针则实时测量网络路径质量,实现基于延迟的智能流量调度。文章通过实战配置步骤,指导如何构建逻辑架构、建立iQuery通信、配置业务级健康检查及探针,从而构建高可用、高性能的全局负载均衡解决方案。

weixin_29240711的博客 469

Openstack学习笔记(十二)-Horizon学习笔记(二)

Horizon Is Easy, Horizon Is Complex如果要用一句话来概括Openstack Dashboard项目Horizon:它是一个基于django webframework开发的标准的python wsgi程序。如果要再加一句废话,它一般会运行在webserver(apache/nginx)上。Why Is It Easy?说Horizon简单,是指它的部署架构简单,就是个

Forlogenの解忧杂货铺 3625

卡方分布的前世今生:一个统计概念的演化史

本文追溯了卡方分布从19世纪末的理论雏形到现代统计推断核心工具的发展历程。从Karl Pearson的数学奠基到Ronald Fisher的理论完善,卡方分布在医学研究、社会科学和机器学习等领域展现出广泛应用。文章通过代码示例和性质分析,揭示了这一统计概念如何持续推动数据科学创新。

weixin_29251567的博客 391

Openstack学习笔记(十五)-Horizon源代码学习笔记(五)

horizon的源代码框架1.整体目录 2.horizon目录 3.openstack-dashboard目录 在了解了horizon代码的结构后对于整体学习代码的实现有很大帮助, 接下来要对具体的代码有个具体的认知。未完…….

Forlogenの解忧杂货铺 2483

西门子SCL出栈入栈算法(附带源码)

栈是一种数据结构,它的特点是数据后入先出(Last In First Out,LIFO)或者说是先入后出,意思是一样的。栈有三个基本动作:初始化、入栈和出栈。接下来给大家介绍下我使用SCL语言编写的栈函数,它以不定长数组作为存储区,以实数作为数据类型,实现了栈的初始化、入栈和出栈的操作。

CHUXUEZHE8210的博客 2332

从零到一:基于Docker与OSM数据构建Valhalla路径规划服务及Mapbox风格可视化

本文详细介绍了如何从零开始,基于Docker容器技术快速部署开源的Valhalla路径规划服务。通过获取免费的OSM地图数据并构建路网,最终实现服务调用与Mapbox风格的地图可视化,为出行应用原型开发或本地化路径规划服务提供了一套完整、高效的实践方案。

weixin_29297127的博客 166

Openstack学习笔记(十一)-Horizon学习笔记(一)

一、 Django1.1 Django介绍Django是一个基于Python的高效的Web开发框架,它提供了通用的Web开发模式的高度抽象;目的是为了可以简便的、快速的开发数据库驱动的网站,强调代码的复用,多个组件可以很方便的以“插件”的形式存在于整个框架中。 1.2 组成部分 1. 对象关系映射:以python类的形式定义数据模型,将模型和关系数据库连接起来,将得到一个易使用的数据库API;

Forlogenの解忧杂货铺 5778

【GlobalMapper精品教程】070:专题地图制作完整操作教程

与其它GIS软件一样,Globalmapper也可以制作出漂亮的地图,本文讲解专题地图制作完整操作流程。

智慧空间实验室 3753

给horizon添加分配指定floating IP的功能

适应版本:E 使用方法: 如下图所示,若要分配指定的floatingIP,可在里输入指定IP;若不要分配指定的floating IP,“IP地址”栏为空,直接点“分配IP”按钮。 修改过程 1./usr/share/pyshared/horizon/dashboards/nova/access_and_security/floating_ips/forms.py:Flo

epugv的专栏 6036

基于 ESP32 的智能药盒提醒装置设计与实现

本装置基于 ESP32 实现了智能药盒的核心功能,硬件选型兼顾成本与实用性,软件设计模块化、易拓展。后续可通过 ESP32 的 WiFi 模块接入物联网平台(如阿里云、OneNet),实现远程设置提醒、服药状态反馈等功能,进一步提升智能化水平。该装置能有效解决老人忘服药问题,具有较高的实用价值与推广潜力。

weixin_42300449的博客 1045

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Openstack学习笔记(十三)-Horizon学习笔记(三)

http://www.cnblogs.com/junneyang/p/5257360.html

Forlogenの解忧杂货铺 1503

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VMware horizon view 6.0学习笔记一

先完成如下的操作服务: 创建域控服务器; 安装数据库; 安装esxi 5.5; 安装vcenter; 安装composer server; 安装connection server;

1664

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

局部路径规划Receding Horizon Planner学习笔记(date20210503)

前提条件 进行完全局路径规划,得到全局路径G0 参数定义 基本变量的定义,其余变量在之后的内容中定义 变量名 解释 C configuration space船的位置状态空间 x 船的位置状态,x属于C Cobst 与障碍物有冲突(如重合)的状态集合,包含于C Cfree 与障碍物不冲突的状态集合,为C去除Cobst的闭集 S 传感器数据 G0 全局参考路径 adj(G0) 临近路径G0且在C附近区域的路径集合 V 由状态所组成的顶点集合(用于有向图) E 由

qq_44043868的博客 2954

Openstack学习笔记(十四)-Horizon学习笔记(四)

Horizon是OpenStack的一个子项目,用于提供一个Web前端控制台(称为Dashboard),以此来展示OpenStack的功能。通常情况下,我们都是从Horizon、Dashboard开始来了解OpenStack的。实际上,Horizon并不会为OpenStack添加任何一个新的功能,它只是使用了OpenStack部分API功能,因此,我们可以扩展Horizon的功能,扩展Dashboa

Forlogenの解忧杂货铺 1872

学习笔记_王隆杰_VMware Horizon View 6.0桌面虚拟化与应用虚拟化

VMware Horizon View 6.0桌面虚拟化与应用虚拟化(笔记) 传统桌面虚拟设想:1.无固定IP; 2.无法下次冷开机 daas 桌面即服务 SaaS 应用虚拟化:只推送应用 2.Horizon View 6和实验环境简介 view agent : view代理 即可以发布VM也可以发布物理机的远程桌面 sec server(secunty server) :安全服务器,主要负责外网用户到内网VM的IP转换 conn server(connect sever):连接服务器,负责用户和虚拟

wwwwzz的博客 1449

考研英语阅读学习笔记

丰锋的博客 1207
上一篇: Python单元测试——深入理解unittest
下一篇: Ceilometer Distributed Alarm
hackerain
博客等级 码龄16年 753粉丝 220原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值