1. 程式人生 > >Horizon 原始碼閱讀(一)—— Horizon 整體介紹

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的特點:

  1. 頁面元素模組化
  2. 子面板可插拔
  3. 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

bottlepython的一個小的伺服器框架原始碼閱讀

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內存