openstack dashboard二次开发


horizon是一个基于django webframework开发的标准的python wsgi程序.
 
Horizon这套面板的设计分成三层:Dashboard → PanelGroup → Panel

Horizon中现有的dashboard有5个:

  1. project 普通用户登陆后看到的 项目面板
  2. admin 管理登陆后可见,左侧的 管理员面板
  3. identity 管理用户、project的权限
  4. settings 右上角的设置面板,里面可设置语言,时区,更改密码
  5. router(配置文件中将profile_support打开可见),ciso nexus 1000v的管理面板

每一个dashboard都是django中的一个app,django中的app可以理解成对业务逻辑模块化的一种手段,里面可以包含自己独有的url设定,模板,和业务逻辑代码.

每个dashboard下定义了一系列的PanelGroup,虚拟机管理对应到界面上就是一个PanelGroup(Manage Compute), 里面有一系列的子panel(Overview, Instances, Volumes…)。Swift,heat,neutron的管理面板各自都是一个PanelGroup,底下有各自的子panel.

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

在/etc/nova/api-paste.ini中,是这样配置nova v2的

[app:osapi_compute_app_v2] 
paste.app_factory = nova.api.openstack.compute:APIRouter.factory

在/usr/lib/python2.7/dist-packages/nova/api/openstack/compute/__init__.py中

class APIRouter(nova.api.openstack.APIRouter):中的

from nova.api.openstack.compute import servers 
def _setup_routes(self, mapper, ext_mgr, init_only): 
    …… 
    self.resources['servers'] = servers.create_resource(ext_mgr) 
    mapper.resource("server", "servers", 
                controller=self.resources['servers'], 
                collection={'detail': 'GET'}, 
                member={'action': 'POST'})

    ……

对于发送给/servers的POST的请求,是发给controller的。

在/usr/lib/python2.7/dist-packages/nova/api/openstack/compute/servers.py中有下面的函数

def create_resource(ext_mgr): 
    return wsgi.Resource(Controller(ext_mgr))

class Controller(wsgi.Controller): 
    @wsgi.response(202) 
    @wsgi.serializers(xml=FullServerTemplate) 
    @wsgi.deserializers(xml=CreateDeserializer) 
    def create(self, req, body): 

 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM