Openstack 有不少項目,好比 nova 是虛擬機管理,neutron 是虛擬網絡管理, glance 是存儲管理,而 horizon 是負責 Openstack 的統一界面。horizon 的源代碼和 neutron 的不太同樣,分佈在兩個地方,一個是 /usr/lib/python2.7/dist-packages/horizon 下面,這裏放的是一些最基本的、能夠共享的類、表格和模板等。另外一個是 /usr/share/openstack-dashboard 下面,這裏放的是跟界面有直接關係、更加具體的類、表格和模板等,也是咱們須要修改的地方。python
Horizon 是一個基於 Django 的項目,若是熟悉 Django 的同窗會發現其實 Horizon openstack-dashboard 裏面的文件命名與擺放位置與 Django 幾乎是同樣的:網絡
.../openstack-dashboard/app
- bin/python2.7
- openstack_dashboard/ui
- static/url
- manage.pyspa
- settings.pycode
從這個文件夾的結構就能夠看出來,openstack-dashboard 其實就是 Django 的一個 project,而openstack_dashboard 是一個 app。進入 app,咱們能夠看到,其中一些比較重要的文件和文件夾有:router
openstack_dashboard/blog
- __init__.py
- views.py
- urls.py
- settings.py
- dashboards/
- enabled/
- static/
- templates/
- test/
...
是否是很熟悉?一會兒就能知道各個文件和文件夾是用來幹嗎的。url.py 負責最頂層的 url 跳轉, views.py 負責接受和處理請求而後返回結果,static 裏面放靜態資源, templates 裏面放模板, test 裏面放 unittest。只有兩個文件夾須要探索一下,dashboards 和 enabled。若是進到 enabled 文件夾裏去看一下的話會發現,裏面有好多添加和刪除 panel 還有 group 的例子,其實這裏就是一個能夠比較簡單的在 horizon 裏面註冊咱們本身想要新建的 panel 的地方。例如咱們能夠把 _50_admin_add_panel.py.example 的後綴去掉,變成 _50_admin_add_panel.py,而後修改其中的內容:
# The name of the panel to be added to HORIZON_CONFIG. Required. PANEL = 'plugin_panel' # The name of the dashboard the PANEL associated with. Required. PANEL_DASHBOARD = 'admin' # The name of the panel group the PANEL is associated with. PANEL_GROUP = 'admin' # Python panel class of the PANEL to be added. ADD_PANEL = \ 'openstack_dashboard.dashboards.admin.plugin_panel.panel.PluginPanel'
這樣,咱們就在一個叫作 admin 的 dashboard 裏面添加了一個叫作 plugin_panel 的 panel,而且告訴 horizon 具體的定義將會在 openstack_dashboard.dashboards.admin.plugin_panel.panel.PluginPanel 中出現。
那這個時候咱們就要去 dashboards 裏面打量打量,而後作些具體的事情啦。首先咱們能夠看到 dashboards 的結構是這樣的:
dashboards/
- __init__.py
- admin/
- project/
-router/
- settings/
由此可知,horizon 如今共有三個 dashboards,分別是 admin,project,和 router。admin 表明的是管理員能夠看到的界面,project 表明的是用戶能夠看到的界面,二者在操做權限上會有必定的區別。而 router 的功用我也不是特別清楚。簡單保險起見,咱們的自定義 panel 就落戶在 admin 中。admin 文件夾中包括了不少文件和子文件夾,我就不在這裏一一贅述了。咱們直接在其中建立一個子文件夾叫作 plugin_panel,而後再這個子文件夾中建立四個文件,使得這個文件夾看起來是這樣的:
plugin_panel/
- __init__.py
- panel.py
- url.py
- views.py
待會兒 PluginPanel 這個類就會定義在 panel.py 中,而 url.py 和 views.py 將會分別承擔這一層的路由跳轉和收發請求及回覆的做用。
今天就寫到這裏,dashboard 的具體修改計劃將會在接下來的幾篇文章中揭曉。