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