Nova對于底層Hypervisor(如KVM/QEMU等)的調用與管理主要通過LibvirtDriver類,nova/virt/libvirt/driver.py
Libvirt對Hypervisor的連接配接有兩種方式:一種是隻讀式,用于管理;另一種是認證式,用于操作;
建立執行個體過程:/nova/api/ec2/cloud.py/L1193, run_instances(),擷取建立數目,kernal_id,ramdisk_id,鏡像uuid等通過self.compute_api.create()
發送執行個體的資訊和要運作執行個體的請求消息到遠端排程器scheduler.
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuQGMzYmNxcjYmlDO3MWNkhjZ2YjMkdjYzAjMkZTY1cDOfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
從使用者發送請求(建立新執行個體)的工作流程:
上圖是一個全局的流程圖,圖中每個服務是一個單獨的程序執行個體,他們之間通過rpc調用(廣播或者調用)另一個服務。
nova-api服務是一個wsgi服務執行個體,建立新instance的入口代碼是在nova /api/openstack/compute/servers.py,處理函數為create(self, req, body);
參數驗證之後,調用compute api的create 函數(代碼在nova/compute/api.py中):
http://www.infoq.com/cn/articles/openstack-access-request-calling-process
eclipse快捷鍵:
注釋:ctrl+/
跳轉函數定義:F3
顯示outline: <code>ctrl+o</code>
自己用c++實作c++反射機制;類比java反射機制