虛擬機創建流程中neutron代碼分析(二)


前言:

當nova服務發送了創建port的restful調用信息之后,在neutron服務中有相應的處理函數來處理調用。根據restful的工作原理,是按照

paste.ini文件中配置好的流程去處理該條調用。本節從neutron代碼中的create_port()函數開始說起。

簡要流程:

下面是調用的流程圖。

 

 詳細代碼:

以上是簡要流程圖,下面是具體的代碼分析。

 

 create_port()

功能:

  1. 調用create_port_db()函數產生port數據。
  2. 更新安全組
  3. 綁定port

 

 

_create_port_db()

功能:

  1. 獲取dhcp配置
  2. 調用create_port_db()函數
  3. 轉化port_db為字典數據形式

 

create_port_db()

功能:

  1. nova傳入的port信息
  2. 生成port的uuid
  3. 獲取租戶並判斷是否合法
  4. 構造port數據字典
  5. 判斷是否制定mac地址,指定了mac則用該mac創建port,沒有則先生成再創建port
  6. 創建port數據結構
  7. create_db_port_obj函數中生成mac地址
  8.  allocate_ips_for_port_and_store函數中生成ip地址填充port

----------------------------------------------------------------------mac地址創建分析開始---------------------------------------------------------------

 

create_db_port_obj()

功能:

  1. 判斷mac地址是否為空
  2. mac地址不為空,判斷mac地址是否在使用當中
  3. mac地址為空則調用generate_mac()函數生成mac

 

generate_mac()

功能:

  1. 返回get_random_mac()函數
  2. get_random_mac()函數生成mac地址。

mac地址生成分析:

首先讀取配置文件中的mac地址,前六位都是固定的。然后生成后六位,使用python的random函數生成隨機數。最后將數據組裝起來。

形成一個完成mac地址。

 ----------------------------------------------------------------------mac地址創建分析結束---------------------------------------------------------------

 

 ----------------------------------------------------------------------ip地址創建分析開始------------------------------------------------------------------

allocate_ips_for_port()

功能:

  1. 調用函數allocate_ips_for_port函數分配ip
  2. 將所有分配的ip地址寫入到neutron數據ipallocations表中。

 

allocate_ips_for_port()

功能:

  1. 判斷用戶是否指定了ip地址
  2. 如果指定ip地址,調用-test_fixed_ips_for_port()函數驗證其合法性
  3. 如果沒有指定,則調用ip地址管理驅動ipam_allocate_ips()函數分配ip地址

 

關於ipam地址管理,里面有一些有意思的知識,看以查看這篇博文。

http://blog.csdn.net/u013553406/article/details/51700198

 

 ipam_allocate_ips()

功能:

  1. 加載ipam框架,工廠方法等。
  2. 調用ipam_driver的allocate()函數產生ip地址

 

 allocate()

功能:

調用generate_ip()函數生成ip地址。

 

 

generate_ip()

功能:

該函數是真正生成ip地址的函數。原理是從neutron數據庫中的ip可用表中選擇出多個ip地址,將ip地址添加到變量ip_allocations中,

然后經過一些列的數據轉化,從所有候選的ip地址中選擇第一個ip地址做為最總生成的ip。,然后將ip地址返回。

 

  ----------------------------------------------------------------------ip地址創建分析結束------------------------------------------------------------------

如下圖是neutron數據庫中有關ip地址的數據表,其中分為neutron-server管理的ipallocaion*和ipam插件管理的ipamallocation*。

 

 每創建一個網絡,都會在neutron-server中生成一條相關ip數據表。如下的子網在數據庫中分別記錄。VM虛機是選擇了哪一個子網,在生成ip時就從該子網的數據庫中分配ip地址。

 

總結:

以上是分析了在neutron-server中創建port里生成mac和ip地址的過程,簡單總結

  • mac地址是根據配置文件和隨機數函數生成
  • ip地址是根據數據庫中的地址池分配

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM