国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

nova vCenter Driver創建虛機與網絡不一致解決辦法

2024-08-27 23:59:38
字體:
來源:轉載
供稿:網友

Vcenter一般指 VMware vCenter™ ServerVMware vCenterServer 提供了一個可伸縮、可擴展的平臺,為 虛擬化管理奠定了基礎,下文我們就來一起看看小編碰到的nova vCenter Driver創建虛機與網絡不一致問題解決辦法.

上周將VMware mech driver實現完成后,發現一個問題,測試時發現,neutron創建的網絡,與nova創建的虛擬機被創建在不同的ESXi主機上,當然cluster中只有一個ESXi主機時,不會存在這個問題.

切換到nova-network下,發現也存在這個問題,launchpad上有人報了這個bug:跟了下/nova/virt/vmwareapi的代碼,錯誤大概是這樣子的.nova在創建虛擬機時,通過_get_vif_infos()獲取vif_infos.

在_get_vif_infos方法中,調用vif.py的get_network_ref方法獲取network_ref,如果使用不用neutron nsx,調用ensure_vlan_bridge,ensure_vlan_bridge在cluster中查找是否存在要創建的網絡(在ESXi主機上為端口組),這個查找是在cluster中指定的1臺ESXi主機上查找,比如ESXi A,如果不存在就去創建網絡.

創建成功后繼續調用network_util.get_network_with_the_name進行查詢,此時應該可以查詢到新建的網絡,但是這個地方有bug,新建的網絡還是查詢不到,因此network_ref返回為空.

所以創建虛擬機時,虛擬機不會加入新建的網絡(端口組).

  1. def ensure_vlan_bridge(session, vif, cluster=None, create_vlan=True): 
  2.  
  3.     """Create a vlan and bridge unless they already exist.""" 
  4.  
  5.     vlan_num = vif['network'].get_meta('vlan'
  6.  
  7.     bridge = vif['network']['bridge'
  8.  
  9.     vlan_interface = CONF.vmware.vlan_interface 
  10.  
  11.    
  12.  
  13.     network_ref = network_util.get_network_with_the_name(session, bridge, 
  14.  
  15.                                                          cluster) 
  16.  
  17.     if network_ref and network_ref['type'] == 'DistributedVirtualPortgroup'
  18.  
  19.         return network_ref 
  20.  
  21.    
  22.  
  23.     if not network_ref: 
  24.  
  25.         # Create a port group on the vSwitch associated with the 
  26.  
  27.         # vlan_interface corresponding physical network adapter on the ESX 
  28.  
  29.         # host. 
  30.  
  31.         vswitch_associated = _get_associated_vswitch_for_interface(session, 
  32.  
  33.                                  vlan_interface, cluster) 
  34.  
  35.         network_util.create_port_group(session, bridge, 
  36.  
  37.                                        vswitch_associated, 
  38.  
  39.                                        vlan_num if create_vlan else 0, 
  40.  
  41.                                        cluster) 
  42.  
  43.         # bug就出在這里,上一步創建的port group,這里沒有獲取到。 
  44.  
  45.         network_ref = network_util.get_network_with_the_name(session, 
  46.  
  47.                                                              bridge, 
  48.  
  49.                                                              cluster) 
  50.  
  51.     elif create_vlan: 
  52.  
  53.         # Get the vSwitch associated with the Physical Adapter 
  54.  
  55.         vswitch_associated = _get_associated_vswitch_for_interface(session, 
  56.  
  57.                                  vlan_interface, cluster) 
  58.  
  59.         # Get the vlan id and vswitch corresponding to the port group 
  60.  
  61.         _get_pg_info = network_util.get_vlanid_and_vswitch_for_portgroup 
  62.  
  63.         pg_vlanid, pg_vswitch = _get_pg_info(session, bridge, cluster) 
  64.  
  65.    
  66.  
  67.         # Check if the vswitch associated is proper 
  68.  
  69.         if pg_vswitch != vswitch_associated: 
  70.  
  71.             raise exception.InvalidVLANPortGroup( 
  72.  
  73.                 bridge=bridge, expected=vswitch_associated, 
  74.  
  75.                 actual=pg_vswitch) 
  76.  
  77.    
  78.  
  79.         # Check if the vlan id is proper for the port group 
  80.        //Vevb.com 
  81.         if pg_vlanid != vlan_num: 
  82.  
  83.             raise exception.InvalidVLANTag(bridge=bridge, tag=vlan_num, 
  84.  
  85.                                        pgroup=pg_vlanid) 
  86.  
  87.     return network_ref 

至于這個新建的網絡查詢為什么會失敗,我還沒想明白.

之后我就想,既然ESXi的標準交換機不支持分布式端口組,那么可以在cluster中的每一臺標準交換機上創建端口組(即網絡),這樣就不存在之前的調度失敗的問題.

嘗試著修改了vm_util.py中get_host_ref的代碼,將cluster中的所有ESXi主機都返回,由于有一些函數調用到get_host_ref,所以如果此時不修改之前的代碼邏輯,調用suds client去調用vSphere API獲取vSphere中某些對象屬性的時候,肯定會報錯.

這個時候,由于自己的粗心,沒有仔細分析日志,認為在一個session中不能獲取vSphere的多個對象,認為在每一個ESXi主機上創建端口組的方法不可行.

突然又想不能這么輕易放棄,如果不去這樣實現,那么就沒有更好的辦法了,靜下心來好好看了日志,發現之前的報錯,還沒有走到create_port_group這一步,于是從報錯的地方開始,把代碼邏輯逐個修改了.

最后創建網絡,創建虛機,發現一切OK.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台南县| 丰镇市| 临江市| 怀宁县| 温宿县| 苗栗市| 石景山区| 社旗县| 项城市| 德阳市| 深州市| 平邑县| 安陆市| 大余县| 建昌县| 年辖:市辖区| 姜堰市| 永新县| 石河子市| 邹城市| 普陀区| 镇巴县| 密山市| 阿鲁科尔沁旗| 三穗县| 合山市| 闽侯县| 玉溪市| 卓资县| 木兰县| 霍山县| 鄂尔多斯市| 周宁县| 垦利县| 泰安市| 屯门区| 遂川县| 翁牛特旗| 西平县| 兴宁市| 太保市|