Horizon中現有的dashboard有5個:
-
project 普通用戶登陸后看到的 項目面板
-
admin 管理登陸后可見,左側的 管理員面板
- identity 管理用戶、project的權限
- settings 右上角的設置面板,里面可設置語言,時區,更改密碼
-
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.

在/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):
