1、寫在前面
做dashboard的二次開發,接觸了horizon,從不熟悉到熟悉,做了些筆記與總結,不涵蓋工作機密的東西,寫這個只是讓自己方便以後回憶而已。
2、content
openstack包括horizon(基於django-based),cinder(用來Block storage),nova(用來conmpute),neutron(網絡 a virtual network service ),swift(用來object storage),ceilometer(監控採集數據),sahara(用來provide users with simple means to provison a Hadoop cluster by specifying serveral parameters like Hadoop version,cluster topology,nodes hardware details and a few more.--官方描述),heat(模板),keystone(認證),glance(鏡像)等項目,還有一些沒聽過名字的。
horizon摘抄筆記:
Horizon是一個基於django webframework開發的python wsgi程序。
Horizon前端是bootstrap+jquery+less。
Horizon需要和幾乎所有的openstack service API打交道,且各個服務可能有多個API版本,horizon需要針對API的多版本做兼容。
Horizon的設計類似Django的設計。
Django設計專注於代碼的高度可重用性,信奉DRY(don’t repeat yourself)原則,一切面向對象。
補充:web開發常識:網站程序基本有三部分組成:業務邏輯代碼(python),靜態文件(js/css),模板,webserver發起請求,server程序找到當前URL的對應模板,填充模板變量(html源碼),返回給瀏覽器,瀏覽器渲染頁面。
爲了提高頁面複用率,horizon將頁面上所有元素模板化,網頁中的常見元素,表單,表格,標籤頁,全部封裝成python類,每個組件有自己對應的一個html模板,當渲染整個頁面的時候,horizon先找到當前頁面有多少個組件,將各個組件分別進行渲染成一段html片段,最後拼接成一個完整的html頁面,返回給瀏覽器。
horizon代碼分析:
最主要用到的兩個地方,horizon和openstack_dashboard,依據openstack版本的不同,他倆所處的位置不一樣,有時候是在同一個文件夾下,有時候不在同一個文件夾下。這裏在同一文件夾。
horizon目錄下static包括修改js,css等文件,templates下包括頁面顯示的基本模板。在openstack_dashboard下每一個mypanel的templates都會包括這些基模板。
openstack_dashboard/dashboards/下包括
admin,project下的每個文件夾叫mypanel,可以被創建,horizon面板的設計:分爲三層:Dashboard—PanelGroup—Panel
Horizon中現有的dashboard有4個:
1、 project:用戶登錄後的項目面板
2、 admin:管理員登錄後看到管理員面板
3、 settings:右上角的設置面板,包括設置語言,時區,更改密碼
4、 router:ciso nexus 1000v的管理面板
Dashboard.py: 位於每個Dashboard的根目錄,其作用是註冊Dashboard(django裏稱爲app)以及設置Dashboard的屬性,比如Dashboard裏有哪些panel。
一個mypanel(可用django創建app的方式創建)通常情況下的組件有,分別爲panel.py、tab.py(可選)、table.py和views.py,urls.py,tests.py 其中,panel是註冊、tab分頁標籤,table展示在頁面的表格,真正展示數據的在view裏面。tests.p測試,__init__.py創建自動生成的空文件。它們的關係是,tab包含table,view包含table或者tab。urls負責鏈接分頁tabs.py。
以project下的access_and_security爲例說明:
其中api_access,floating_ips,keypairs,security_groups相當於分頁標籤。每個分頁標籤下的結構
這個結構應該不是和創建mypanel一樣,因爲是顯示在右側頁面裏的標籤。