Horizon 原始碼閱讀(一)—— Horizon 整體介紹
這篇文章主要介紹一下Openstack Horizon — juno專案的整體情況,關於這方面的內容網上已經有很多相關的介紹,我在這裡只作為一個知識的搬運工,把一些分散的內容加上個人的理解形成一篇介紹性博文,由於能力和時間有限,錯誤之處在所難免,歡迎指正!
如果轉載,請保留作者資訊。
郵箱地址:[email protected]
二、Horizon介紹
Horizon是OpenStack的一個子專案,用於提供一個Web前端控制檯(稱為Dashboard),以此來展示OpenStack的功 能。通常情況下,我們都是從Horizon、Dashboard開始來了解OpenStack的。實際上,Horizon並不會為OpenStack新增任何一個新的功能,它只是使用了OpenStack部分API功能,因此,我們可以擴充套件Horizon的功能,擴充套件Dashboard。
Horizon是基於django webframework開發的標準的python wsgi程式,django的設計專注於程式碼的高度可重用,信奉DRY原則,一切面向物件,而Horizon可以說高度match了django的設計風格。
先說一點web開發的常識,網站程式基本有三部分組成,業務邏輯程式碼(Python),靜態檔案(js/css),模板(Python中的 jinja,mako,nodejs中有jade), 使用者向webserver發起請求之後,server程式找到當前url對應的模板,填充模板變數(輸出成字串形式的html原始碼),返回給瀏覽器,瀏覽器渲染頁面。
如果是簡單的程式,一個頁面就對應一個模板,非常簡單。一般一個網站有自己的統一風格,所有頁面都會有一些相同的元素,每個頁面單獨寫一遍很累贅,也不好維護,所以一般模板語言都有繼承(extend),插入(include)等特性,來提高頁面的複用率。
Horizon做得就更徹底一些,它將頁面上所有元素模組化,網頁中一些常見元素,表單,表格,標籤頁,全部封裝成Python類,每個元件有自己 對應的一小塊html模板.當渲染整個頁面的時候,Horizon先找到當前頁面有多少元件,將各個元件分別進行渲染變成一段html片段,最後拼裝成一 個完整的html頁面,返回瀏覽器。
簡單總結Horizon的特點:
- 頁面元素模組化
- 子面板可插拔
- All in One(從部署上來說,Horizon只有它自己這一個元件)
三、深入Horizon
1、整體結構
Horizon這套面板的設計分成三層:Dashboard -> PanelGroup -> Panel
(1)、project 普通使用者登陸後看到的專案面板
(2)、admin 管理登陸後可見,左側的管理員面板
(3)、settings 右上角的設定面板,裡面可設定語言,時區,更改密碼
(4)、identity 不同的角色登陸之後,左側的“身份”面板,可設定專案使用者
(5)、router ciso nexus 1000v的管理面板
每一個dashboard都是django中的一個app,django中的app可以理解成對業務邏輯模組化的一種手段,裡面可以包含自己獨有的url設定,模板,和業務邏輯程式碼。每個dashboard下定義了一系列的PanelGroup,虛擬機器管理對應到介面上就是一個PanelGroup(ManageCompute), 裡面有一系列的子panel(Overview, Instances, Volumes…)。Swift,heat,neutron的管理面板各自都是一個PanelGroup,底下有各自的子panel。
2、專案結構
Horizon的原始碼中,包含兩個程式碼資料夾
1、horizon
2、openstack_dashboard
Horizon這個包是一些在django基礎上寫的通用元件,表格(table),標籤頁(tab),表單(form),麵包屑導航 (browser),工作流(workflow),這些程式碼和openstack的具體業務邏輯沒有什麼關係,如果做一個新的django專案,理論上可以複用Horizon這個包中的程式碼。horizon/base.py中還實現了一套dashboard/panel機制,使得Horizon面板上所有的dashboard都是”可插拔”的,所有的panel都是”動態載入”的。
openstack_dashboard/dashboards/中是各個面板的具體實現程式碼,其中包括各個面板的模板檔案, 和後端service互動的業務邏輯程式碼等。
以下對重要目錄做一個介紹,有些目錄目前還沒有接觸到還不清楚具體的作用:
horizon
./doc: horizon相關幫助性文件
./horizon:horizon通用元件庫
./browsers:
./conf:Horizon配置檔案
./contrib:
./forms:form表單基類包
./locale:國際化語言包
./management:manage.py startdash/startpanel命令
./static:horizon靜態檔案包
./tables:table基類包
./tabs:tab基類包
./templates:模板檔案基類
./templatetags:模板標籤基類
./test:測試包
./utils:工具包
./workflows:工作流機制包
./openstack_dashboard:horizon各個面板的具體實現程式碼
./api:呼叫nova、swift、glance等介面封裝
./conf:nova、cinder等API訪問許可權控制,叫 xxx_policy.json,裡 面定義了鑑權用的rules。
./dashboards:Horizon介面展示各個模組實現目錄。
./admin:管理員介面
./instances:雲主機管理介面
./templates:雲主機html介面模板
./forms.py:form表單實現
./panel.py:實現panel註冊到dashbord
./tables.py:table實現
./tests.py:測試
./urls.py:url對映
./views.py:url對映的檢視
…...
./identity:專案、使用者管理介面
./project:普通使用者專案介面
./router:
./settings:設定介面
./django_pyscss_fix:
./enabled:控制導航載入哪些模組顯示出來。
./local:本地配置檔案
./locale:本地國家化語言包
./management:定義安裝apache、horizon等是配置檔案的
模板檔案。
./openstack:log、_i18n等包
./static:horizon靜態包
./templates:horizon模板包
./templatetags:horizon模板標籤包
./test:測試包
./usage:Horizon概況頁面資源統計實現包
./utils:工具包
./wsgi:wsgi包
./tool: horizon工具包
./manage.py :
相關推薦
Horizon 原始碼閱讀(一)—— Horizon 整體介紹
一、寫在前面 這篇文章主要介紹一下Openstack Horizon — juno專案的整體情況,關於這方面的內容網上已經有很多相關的介紹,我在這裡只作為一個知識的搬運工,把一些分散的內
Horizon 原始碼閱讀(二)—— Horizon 模組註冊機制
一、寫在前面 這篇文章主要介紹一下OpenStack Horizon — juno專案模組註冊機制,本文將通過對Horizon原始碼解析瞭解各個模組註冊載入機制。全文穿插了Horizon組建的程式碼塊以及個人理解註釋,由於能力和時間有限,錯誤之處在所難免,歡迎指正!
Horizon 原始碼閱讀(四)—— 呼叫Novaclient流程
一、寫在前面 這篇文章主要介紹一下OpenStack(Kilo)關於horizon 呼叫NovaClient的一個分析。 如果轉載,請保留作者資訊。 原文地址:http://blog.csdn.net/u011521019/a
Spark原始碼閱讀(一)
強烈推薦 https://blog.csdn.net/weixin_41705780/article/details/79273666 總體架構 Spark工程下的模組 spark core, spark 核心 spark streaming, spark流計算(基
Koa原始碼閱讀(一)從搭建Web伺服器說起
先複習一下使用原生 Node.js 搭建一個 Web 伺服器。 var http = require('http'); var server = http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'te
ConcurrentHashMap原始碼閱讀(一)
原始碼所屬版本為jdk1.8 ConcurrentHashMap: public V put(K key, V value) { return putVal(key, value, false); } 這是put方法可以看到呼叫的是put
AFNetWorking3.2.0原始碼閱讀(一)-AFURLSessionManager.h
AFNetWorking3.2.0原始碼閱讀(一)-AFURLSessionManager.h AFNetWorking3.2.0原始碼閱讀(一)-AFURLSessionManager.h AFURLSessionManager.h 介紹
Testng 測試框架原始碼閱讀(一)
首先看下 maven-surefire 通過testng拉起單測,執行異常的日誌(有助於我們理解testng中呼叫關係): java.lang.instrument.IllegalClassFormatException: Error while instrumentin
Docker原始碼分析(一)之整體架構圖
一、Docker的總架構圖 docker是一個C/S模式的架構,後端是一個鬆耦合架構,模組各司其職。 使用者是使用Docker Client與Docker Daemon建立通訊,併發送請求給後者
JUNIT4.11原始碼閱讀(一)--org.junit.Assert類
最近開始閱讀JUNIT4.11原始碼,特寫此文記錄,如有不妥之處煩請指正! 1 原始碼匯入:junit4.11.zip 將檔案解壓,然後獲得5個JAR包,解壓junit-4.11-sources.jar 這裡就是我們最好需要的原始碼 將程式碼匯入ecl
SpringMVC原始碼剖析(一)SpringMVC整體架構分析和建立
先看一下Servlet的繼承結 前面的Servlet體系我都有講過HttpServlet實現了根據動作分發請求 其他結構重要的類為HttpServletBean,FrameworkServlet ,DispatcherServlet 在Spring中實現了XXXAware
bottle(python的一個小的伺服器框架)的原始碼閱讀(一)
bottle學習的不是很多,用bottle實現了一個連結mongodb的server。 索性bottle的原始碼也不是很多(4000行,主要的程式碼部分)。 所以我就去讀了一下原始碼: from bottle import Bottle, run fr
Glide4.8原始碼拆解(一)入門級介紹
前言 Glide是一款功能強大的圖片載入框架,它功能強大,用法簡單且易於擴充套件,同時也是Google推薦的Android平臺圖片載入庫,堪稱優秀。 本章拆解思路 這算是開篇第一章吧,我準備從入口類和簡單的呼叫流程說起,包括但不限於: Glide的構造 RequestManager和生命週期
ZooKeeper原始碼分析(一)—ZooKeeper介面介紹
ZooKeeper原始碼分析(一)—ZooKeeper介面介紹 一、Server角色 每個Server在工作過程中有三種狀態: ① LOOKING:當前Server不知道leader是誰,正在搜尋。 ② LE
AFNetworking3.1.0原始碼分析(一)整體框架和功能模組
簡介 1:基於系統NSURLSession類族封裝完成HPPT/HPPTS(GET,PUT,PSOT,DELEATE,HEAD)網路請求 2:擴充套件部分UIKit控制元件,比如擴充套件UIIMag
OkHttp 3.7原始碼分析(一)——整體架構
OkHttp是一個處理網路請求的開源專案,是Android端最火熱的輕量級框架,由移動支付Square公司貢獻用於替代HttpUrlConnection和Apache HttpClient。隨著OkHttp的不斷成熟,越來越多的Android開發者使用OkHtt
libevent原始碼解讀(一)--總體閱讀
我學習新東西的方法是對新東西有個大概的瞭解,然後在逐步深入。我不知道這種方法好不好,如果有什麼好的學習方法,望推薦! 廢話少說,先下載原始碼然後安裝。本人使用的原始碼是穩定版的libevent-2.0.6。至於他的詳細更新,可以到他的程式碼庫去看。https
caffe原始碼剖析(一)--整體目錄結構
從今天開始,我們來細緻的分析一下caffe的原始碼。(此係列僅分析caffe原始版本,對於caffe2不涉及,並且只分析各類實現的cpu版,對於gpu實現筆者精力和能力有限,暫不作分析) 分析原始碼之前,我們需要對caffe的程式碼結構有一定的瞭解,只有充分了解了原始碼的組
KBEngine warring項目源碼閱讀(一) 項目簡介和註冊登錄
urn 創建 ges input alt 接下來 F12 .com name 首先介紹下warring項目,是kbe自帶的一個演示示例,大部分人了解kbe引擎也是從warring項目開始的。 項目地址:https://github.com/kbengine/kbengine
LevelDB的源碼閱讀(一)
問題: 重寫 文件 相同 ping 因此 存儲 選擇 leveldb 源碼下載 git clone https://github.com/google/leveldb.git 項目結構 db/, 數據庫邏輯 doc/, MD文檔 helpers/, LevelDB內存