control your panel

三、OpenStack入门 之 各组件解析 OpenStack入门 之 各组件解析写在前面学习目标: 掌握 OpenStack 的各组件的架构和功能 本次笔记的内容有: Nova 组件解析 Swift 组件解析 Cinder 组件解析 Neutron 组件解析 Horizon 组件解析 Glance 组件解析 Keystone 组件解析 是常用的 7 个组件: 负责虚拟机创建、管理和销毁、提供计算资源服务的 Nova; 提供对象存储服务的分布 阅读详情

本科的时候学了点儿UI开发的皮毛,研究生的时候摆弄过Django,后来终究还是把UI那一套东西留在某个角落了,虽然horizon提供了极为动态的扩展修改机制,

并不需要对UI有太多的了解就能开发出不错的效果(终究是一个Django项目,要想实现自己的复杂的js效果,还是需要专门搞UI的人来写html页面的), 前面讲了好

几篇关于怎么实现horizon的东西,有几个疑问需要收尾:

1. 各种settings文件的关系, RDO装好之后又/etc/openstack-dashboard/local_settings(使用virtual env时候,要配置的local setting也是这个), 有

/usr/share/openstack-dashboard/openstack_dashboard/settings, 还有配apache之后/etc/httpd/conf.d/15-horizon_vhost.conf,主要是这三个

2.  如何控制panel的显示?比如在/usr/share/openstack-dashboard/openstack_dashboard/dashboards/project中的dashboard.py中:

class Project(horizon.Dashboard):
    name = _("Project")
    slug = "project"
    panels = (
        BasePanels,
        NetworkPanels,
        ObjectStorePanels,

        OrchestrationPanels,
        DatabasePanels,
        DataProcessingPanels,)
    default_panel = 'overview'

红色的是我们常规可以看到的compute,network,object store三个panel group,我们在panel group中添加panel前面已经说过很多,没有问题,会显示出来,但是

这些剩下的heat,trove,sahara为什么没有显示出来呢?

3. 在template中call url怎么做到呢,我们事先自己的页面,初始化的数据可以传进去,想tabview那样,但是如果动态获取数据怎么得到呢?

整个horizon的问题很多,虽然horizon是openstack的一个模块,然而它并不影响openstack的逻辑,你也可以实现自己的完全新的UI,国内的利用openstack搞公有云的

都是这个路子。


查阅资料,但看horizon的源码,我的理解是:

1. 几个setting文件的作用,/usr/share/openstack-dashboard/openstack_dashboard/settings是基本的配置,/etc/openstack-dashboard/local_settings则可以

修改它,在local_settings中做的配置可以覆盖基本配置,关于STATIC_ROOT, error log等则在/etc/httpd/conf.d/15-horizon_vhost.conf中(关于horizon和apache的

配置可以参看horizon官网配置), Ubuntu上在openstack-dashboard/openstack_dashboard/dashboards/local/local_settings.py中的修改才会起作用(为什么ubuntu和Centos表现出来的不一样的,难道是J版和K版的差异?需要再看看。。。)


2. 即使我们在 openstack_dashboards/dashboards/project中的dashboard.py中添加Panel,还是不一定会显示,实际控制Panel显示的是keystone, 只有在

keystone中注册service才可以看到对应的panel,比如data_processing/clusters/panel.py和firewall/panel.py中我们可以看到:

permissions = ('openstack.services.network',)

    permissions = (('openstack.services.data-processing',
                    'openstack.services.data_processing'),) #本来是个bug,这里填写两个,表示两者均可, 是OR的关系

参照: https://bugs.launchpad.net/horizon/+bug/1429987

然而即便是permissions的限制解除,仍有方法限制是否显示,比如在firewall/panel.py中:

 def allowed(self, context):
        request = context['request']
        if not request.user.has_perms(self.permissions):
            return False
        try:
            if not neutron.is_service_enabled(request,
                                              config_name='enable_firewall',
                                              ext_name='fwaas'):

                return False

看neutron的api中代码,找到is_service_enabled方法,

def is_service_enabled(request, config_name, ext_name):
    return (is_enabled_by_config(config_name) and
            is_extension_supported(request, ext_name))

最终走到settings配置文件中(local_setting):

OPENSTACK_NEUTRON_NETWORK = {
    'enable_lb': False,
    'enable_firewall': False,
    'enable_quotas': True,
    'enable_security_group': True,
    'enable_vpn': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,

所以既要enabled by 配置文件,也要extension supported,这里的extension supported在分析neutron时候提过。


3.之前写了如何加入自己的static file比如css或者js库,这里第三个问题更多的时候如何写完整的,特殊效果的html页, 看一个最典型的例子,

network_topology panel中的index.html.

首先是include了三个html页面,都是{% extends "horizon/client_side/template.html" %},且包含一个block id,什么时候体现作用,我们稍后提到

{% include "project/network_topology/client_side/_balloon_container.html" %}
{% include "project/network_topology/client_side/_balloon_device.html" %}
{% include "project/network_topology/client_side/_balloon_port.html" %}

接着定义了几个button,看一个create network的button:

{% if create_network_allowed %}
      <a href="{% url 'horizon:project:network_topology:createnetwork' %}" id="networks__action_create" class="btn btn-default btn-sm ajax-modal

{% if network_quota_exceeded %}disabled

{% endif %}">

<span class="fa fa-plus"></span> {% if network_quota_exceeded %}{% trans "Create Network (Quota exceeded)"%}

{% else %}{% trans "Create Network"%}{% endif %}</a>

点击create network button弹出创建网络的template。


再看一句:

<span data-networktopology="{% url 'horizon:project:network_topology:json' %}" id="networktopology"></span>

要想在html里面获得数据怎么办?答案就在这里,trace horizon:project:network_topology:json最终在network_toplogy的view中得到:

    def get(self, request, *args, **kwargs):
        data = {'servers': self._get_servers(request),
                'networks': self._get_networks(request),
                'ports': self._get_ports(request),
                'routers': self._get_routers(request)}
        self._prepare_gateway_ports(data['routers'], data['ports'])
        json_string = json.dumps(data, ensure_ascii=False)
        return HttpResponse(json_string, content_type='text/json')

得到数据了!

在哪儿用的呢?

<script type="text/javascript">
  if (typeof horizon.network_topology !== 'undefined') {
    horizon.network_topology.init();
  } else {
    addHorizonLoadEvent(function () {
      horizon.network_topology.init();
    });
  }
</script>

我们看看horizon.network_toplogy.init()最终调用的是什么?

horizon/static/horizon/js/horizon.network_topoligy.js中的init()方法,在该方法中我们可以看到:

    self.balloon_tmpl = Hogan.compile($('#balloon_container').html());
    self.balloon_device_tmpl = Hogan.compile($('#balloon_device').html());
    self.balloon_port_tmpl = Hogan.compile($('#balloon_port').html());

红色的部分就是前面提到的include进来的三个html页的id, 在init函数中通过:

$.getJSON($('#networktopology').data('networktopology') + '?' + $.now(),
      function(data) {
        self.model = data;
        self.data_convert();
        setTimeout(function(){
          self.load_network_info();
        }, self.reload_duration);
      }
    );

拿到数据, 点击不同按钮或者不同操作时,用js生成不同效果。

到这里,三个问题就回答完了,最后mark一个关于url解析的文章,写的不错:

http://blog.youkuaiyun.com/feelang/article/details/25464261




OpenStack DashBoard 报错:遇到异常情况,请刷新 阅读详情

相关推荐

Godot 4游戏UI开发实战:从Control节点到HUD与背包系统

在游戏开发中,用户界面(UI)是连接玩家与游戏世界的核心交互层,其设计直接影响用户体验。UI系统通常基于控件节点体系构建,通过锚点、容器等布局机制实现响应式适配,确保在不同分辨率和屏幕比例下保持视觉一致性。从技术原理看,UI与游戏逻辑的分离、信号驱动更新是提升可维护性的关键架构模式,这不仅能优化性能,还能支持复杂的动态交互。在3D游戏场景中,UI需要与3D世界协调,常见应用包括HUD(抬头显示器)、背包系统、菜单界面等,用于实时展示玩家状态、道具管理和游戏控制。本文以Godot 4引擎为例,深入探讨如何利用

weixin_33979203的博客 480

Openstack安装过程中出现的一些问题及解决

Openstack安装过程中出现的一些问题及解决 摘要: 一、Centos7安装Mitika问题 1.问题:在keystone安装阶段请求认证令牌出现错误 1 2 3 4 5 6 7 8 9 10 11 12 # vim admin-openrc export OS_PROJECT_DOMAIN_NAME=default expor… 一、Centos7安装Mitika问题 1.问题:在keyst...

weixin_43467082的博客 2万+

ControlPanelPlus.exe

史上最有效的禁用 Windows 10 自动更新方法!

OpenStack Train 安装过程记录:问题记录 ing……

初次接触 OpenStack ,之前按照官方文档安装了一遍,期间碰到了几个问题,而且是由于官网给出的配置错误导致的,在此总结记录一下。 首先要说明,解决问题最根本的方法就是:看日志,看日志,看日志,而且 OpenStack 各组件之间有调用关系,需要查看多个日志来定位问题所在! Horizon 安装后,Web 无法访问,报错为 500 Internal Server Error Horizon使...

某呆 3290

ControlPanelPlus.zip

Control Panel Plus是一款系统设置优化软件,能够轻松调整Windows的隐藏设置,使用方法非常简单直白,勾选代表启用,不选代表禁用,将鼠标悬停在各项文字上即可获得帮助!

华为2288H-V5服务器做raid的详细步骤

操作步骤 服务器启动界面 按del键进入设置输入密码,2288H-v5默认密码是Admin@9000 移动光标选择device manager 驱动管理选择configurationutility 配置管理 选择main menu 主菜单 选择第一个 configuration management 配置管理 选择create virtual driver 创建虚拟驱动选择select RAID level 选择RAID等级选择level-5 选择select drivers 选择驱......

weixin_46041124的博客 1万+

OpenStack在dashboard界面点击管理员网络,服务器页面出错

OpenStack在dashboard界面点击管理员网络,服务器页面出错解决办法 首先检查日志 cat /var/log/httpd/error_log 如果最下行提示:Call to list enabled services failed. This is likely due to a problem communicating with the Neutron endpoint. VPN ...

指剑 2851

从零实现机械臂抓取仿真:用MoveIt+Gazebo完成物体pick&place全流程

本文详细介绍了如何使用ROS的MoveIt框架与Gazebo仿真环境,从零构建机械臂抓取仿真系统。涵盖环境搭建、MoveIt配置、Gazebo集成、抓取动作实现等全流程,帮助开发者掌握机械臂控制的核心技术,实现高效的pick&place任务。

weixin_29250403的博客 476

java安全例外_java – 本地Applet安全例外

我正在尝试在浏览器中运行一个基本的hello worldJava applet,但我不断收到“应用程序被安全设置阻止”,并显示以下消息:SecurityException: Your security settings have blocked a local application from running我尝试通过Java Control Panel更改安全设置,但没有滑块,只有证书.尝试在其...

weixin_28908491的博客 206

CVPR2021 CenterPoint源码解读:从VoxelNet到两阶段优化的完整实现细节

本文深度解析了CVPR 2021 CenterPoint模型的完整实现细节,从VoxelNet体素化、稀疏卷积Backbone,到基于中心点的检测头与两阶段精修机制。文章提供了从环境搭建、数据预处理到核心代码模块(如热力图生成、关键点特征提取与MLP Refiner)的实战指南,并分享了训练策略、多任务损失调优及可视化调试等关键工程实践,助力开发者深入理解并复现这一高效的3D目标检测框架。

linux的博客 470

termux 安装 rockylinux

往找最新的文件目录,选择ARM版本的image。或者直接查看目录或者国内阿里云镜像,按照cpu架构(安卓9手机一般是aarch64arm最新架构),获取镜像地址,以及checksum里的SHA256信息更新到以下rocky9.sh脚本,如果不需要直接使用即可。

欢迎来到别往的博客 984

Control your PDA's LED

I wrote a VB.NET class named LED to control PDA's LED.我写了一个名为LED的类来控制PDA的LED灯。Please see http://www.pocketpcdn.com/articles/led.html first to help understand the core of this class.请首先阅读http://www.poc...

weixin_34185560的博客 100

WRF后处理:python cartopy绘制土地利用/土地分类图//python绘制WRF下垫面类型(以北极为例)

下垫面类型对于WRF的地表过程十分重要,而在我们研究WRF的地表过程之前,需要对输入的土地利用类型进行一些绘制,以便后续的修改。LU_MODIS21函数定义了绘制的土地类型、标签与对应色标,我们使用时,直接引用LU_MODIS21()即可返回。其实很简单,只要将你拥有的土地类型数据提取出来,将原本函数中的labels和C切片,重新定义色标再绘制即可。在这里,我将以北极地区为例,绘制北极地区的WRF下垫面数据,我使用的MODIS21这类。

weixin_43750300的博客 3859

1Panel服务器批量管理:告别手动操作,实现多主机高效运维

还在为管理多台服务器而烦恼吗?您是否经历过这样的场景:需要在十几台服务器上执行相同的安全更新,却不得不逐台登录、逐条执行命令?或者需要同时监控多个服务器的运行状态,却在不同的SSH会话间来回切换?今天,让我们一起来探索1Panel如何通过强大的批量操作功能,彻底改变您的服务器管理方式。 ## 问题:传统服务器管理的效率瓶颈 在传统的服务器管理模式下,管理员面临着三大核心挑战: **挑战一:重

gitblog_00430的博客 829

LE AUDIO---Volume Control Service

LE AUDIO---Volume Control Service

weixin_42162924的博客 163

大聪明教你学Java | Seata 2.5 从下载到运行:全流程编译部署教程

Seata 2.5 版本带来了不少特性优化,但实际部署时却发现一个尴尬问题:全网找不到一篇完整覆盖「Git 源码下载→本地编译→环境配置→启动验证」的实操教程。作为一名踩遍无数坑才成功跑通的开发者,我深知这个过程的煎熬:Git 拉取源码后编译失败、依赖版本冲突、配置文件参数混乱、启动时端口占用或连接报错… 每一个坑都能耗费数小时排查。为了让后续开发者少走弯路,我将自己从0到1的完整实操经验整理成文,跟着步骤走即可成功运行 Seata 2.5.

不肯过江东丶 2072

多服务器批量管理:1Panel自动化运维的智能解决方案

在现代IT基础设施管理中,运维团队常常面临同时管理数十甚至数百台服务器的挑战。传统的逐台登录、手动执行命令的方式不仅效率低下,还容易因人为操作失误导致配置不一致。1Panel作为一款现代化的开源服务器控制面板,提供了强大的批量操作功能,让多服务器管理变得简单高效。本文将深入探讨如何利用1Panel的批量管理功能实现规模化服务器运维自动化。 --- ## 一、传统多服务器管理的痛点分析 ###

gitblog_00435的博客 1125

仿真学习系列(四十三):Sigrity仿真之平面谐振分析

在 SIGRITY 中,平面谐振分析(Plane Resonance Analysis)是一种用于分析信号完整性(SI)问题的高级仿真方法,尤其关注于层间电磁波的传播、谐振现象和信号衰减等问题。平面谐振分析通常用于电源分配网络(PDN)、信号线和参考平面之间的相互作用。本文将详细介绍如何在 SIGRITY 中进行平面谐振分析,并提供一些实用的分析方法与步骤,帮助工程师们识别和优化可能存在的设计问题。

案例文章,高速信号 481

如何用1Panel实现多服务器批量管理?掌握这3大核心理念提升运维效率10倍

你是否还在为管理多台服务器而头痛?每次需要执行系统更新、安全检查或应用部署时,都要逐台登录、重复操作,不仅耗时费力,还容易出错。1Panel作为一款现代化的VPS控制面板,提供了强大的批量操作功能,让你能够像管理一台服务器那样轻松管理整个服务器集群。本文将带你深入了解1Panel的批量管理核心理念,并提供实用的操作指南和高级技巧。 ## 核心理念:从单点操作到集中管理 传统的服务器管理方式就像

gitblog_00761的博客 415

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

如何通过Package Control提升Sublime Text开发效率:3个关键策略

在当今快速迭代的开发环境中,Sublime Text作为轻量级代码编辑器深受开发者青睐,但其原生包管理功能有限,导致插件生态碎片化、依赖管理混乱。Package Control作为Sublime Text的官方包管理器,通过集中式仓库和智能依赖解析,将插件安装时间从分钟级降至秒级,让开发者能够专注于核心业务逻辑而非环境配置。本文将深入探讨如何利用Package Control优化开发工作流,实现插

gitblog_00648的博客 502

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

using update panel do sync job , update UI control async

Scenario : 1.click submit disable button ,start job  2.once job done , enable submit button Here is the implementation : Aspx page Code : Step 1: add update panel and scri

我的英文站点:https://iorilan.medium.com/ 1716

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OpenClaw V2026.5.22:内存泄漏修复与Control UI重构详解

内存泄漏和Web控制台(Control UI)是现代插件化AI服务系统稳定运行的两大基石。其本质并非代码疏漏,而是资源生命周期管理缺失与前端-网关安全通信机制薄弱所致。通过强制插件实现Runtime Lifecycle契约、引入设备身份绑定的JWT认证、以及微前端沙箱隔离架构,OpenClaw V2026.5.22实现了从‘能用’到‘敢长期运行’的关键跃迁。该版本特别适用于NAS部署、家庭IoT中枢、自动化日志分析等需7×24小时值守的生产场景,为开发者提供可验证、可审计、可干预的工程级稳定性保障。

jackleechina2011212的博客 637

Vesta控制面板在Ubuntu 12.04 LTS上的轻量级部署实践

Web主机控制面板是面向Linux服务器的可视化管理工具,其核心原理在于封装系统原生命令(如useradd、nginx -t)并实现用户级权限隔离。技术价值体现在资源占用极低、配置透明、无运行时黑盒依赖,特别适合老旧硬件、嵌入式环境及教学实验场景。典型应用包括中小站点托管、静态博客集群管理、PHP应用快速上线等。本文聚焦Vesta Control Panel与Ubuntu 12.04 LTS这一经典组合,深入解析其版本锁定机制、PHP扩展路径兼容性及基于UID/GID的底层安全模型,揭示轻量级服务器管理的本

weixin_30752699的博客 320

Sublime Text 3 离线安装controll package,pretty json, Sublimerge, SqlBeautifier

Sublime Text 4 如何安装Package... 首先打开Sublime Text,使用快捷键Shift+Ctrl+P,弹出查找栏 在搜索框中直接输入关键字 install ,出现下拉选项。 点击选择其中的:Install Package Control,等待安装

龙遥的世界 5424

How to resolve "your security settings have blocked an untrusted application from running" in Mac

If you encounter the error "your security settings have blocked an untrusted application from running" when open a website in Mac, how to resolve it? Adds your website to "Exception site list" on "Se

我编程,我快乐 6235

宝塔面板安全指南:从开心版风险到官方最佳实践

服务器运维管理面板作为简化Linux服务器配置的重要工具,通过可视化界面降低了网站部署、数据库管理和安全设置的复杂度。其工作原理是通过封装底层命令行操作,提供统一的Web管理接口,让用户无需深入掌握系统命令即可高效管理服务器。这类工具的技术价值在于大幅提升运维效率,降低技术门槛,特别适合个人站长、开发者和中小企业快速搭建线上业务。在应用场景上,无论是Web应用部署、数据库管理还是服务器监控,运维面板都发挥着关键作用。然而,围绕宝塔面板等工具出现的“开心版”现象,却带来了严重的安全隐患和法律风险。这些非官方修

weixin_34279246的博客 397
上一篇: storage -cinder(2)
下一篇: what happened while start nova compute service
dingdingwolf
博客等级 码龄16年 7粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值