天天看點

Openstack Nova 源碼分析 — 使用 VCDriver 建立 VMware Instance目錄前言流程圖nova-compute & vCenter

<a href="#%E7%9B%AE%E5%BD%95">目錄</a>

<a href="#%E5%89%8D%E8%A8%80">前言</a>

<a href="#%E6%B5%81%E7%A8%8B%E5%9B%BE">流程圖</a>

<a href="#nova-compute-vcenter">nova-compute vCenter</a>

NOTE:下面的代碼塊大多為節選。

Openstack Nova 源碼分析 — 使用 VCDriver 建立 VMware Instance目錄前言流程圖nova-compute &amp; vCenter

緊接着,當 nova-conductor 調用了 nova-compute 的 RPC 接口後,相應接口的具體操作函數在 nova.compute.manager 中實作。

在上述的 nova.compute.manager.ComputeManager:build_and_run_instance()中調用了<code>_do_build_and_run_instance()</code> 函數。

再跳轉到 <code>_build_and_run_instance()</code>,這個函數非常重要。

NOTE:task states 執行 Task 時的過渡狀态,在狀态發生改變時會向外部發出通知。前提是配置項notify_on_state_change要配置為<code>vm_state</code>或<code>vm_and_task_state</code>(有待驗證)。

因為我希望使用 VCDriver 驅動類型, 是以在 Nova 的配置檔案 /etc/nova.conf 中設定選項<code>compute_driver=vmwareapi.VMwareVCDriver</code>。

這樣的話,通過執行代碼 <code>compute_driver = CONF.compute_driver</code> 就可以獲得 VCDriver 的 driver 對象。當我們使用這個 driver 對象來建立虛拟機時,程式流會進入到nova/virt/vmwareapi/ 再通過調用 VMware 提供的 API 接口 (nova.virt.vmwareapi.driver.VMwareVCDriver:spawn())來最終實作虛拟機的建立 。

跳轉到 nova.virt.vmwareapi.vmops.VMwareVMOps:spawn()

繼續跳轉到 nova.virt.vmwareapi.vmopss.VMwareVMOps:build_virtual_machine() 。

在 VMwareVMOps:build_virtual_machine() 函數中又調用了 nova.virt.vmwareapi.vm_util:get_vm_create_spec() 函數來擷取建立虛拟機所需要的參數資訊。同時也調用了nova.virt.vmwareapi.vm_util:create_vm() 來 Create the VM 。是以我們先轉到 nova.virt.vmwareapi.vm_util Module 去看看具體的 Return 。

到此為止關于虛拟機的建立就完成了,需要注意的是:在我們建立完虛拟機之後其實還有許多的事情是需要做的,EG. 更新資料庫/開啟虛拟機

是以,在nova.virt.vmwareapi.vm_util:create_vm() 中得到了建立虛拟機的 Task Result <code>task_info.result</code> 之後,需要使用這一 Return 來進行一系列的操作。當然,這一系列的操作會在 VM 相關任務管理類: nova.virt.vmwareapi.wmops.VMwareVMOps 中實作。