mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	CLOUDSTACK-8765: fix vm migration failure due to different dev name on KVM
This commit is contained in:
		
							parent
							
								
									82df5b156b
								
							
						
					
					
						commit
						bb8f7c652e
					
				| @ -16,6 +16,7 @@ | |||||||
| # specific language governing permissions and limitations | # specific language governing permissions and limitations | ||||||
| # under the License. | # under the License. | ||||||
| import sys | import sys | ||||||
|  | import re | ||||||
| from xml.dom.minidom import parse | from xml.dom.minidom import parse | ||||||
| from cloudutils.configFileOps import configFileOps | from cloudutils.configFileOps import configFileOps | ||||||
| from cloudutils.networkConfig import networkConfig | from cloudutils.networkConfig import networkConfig | ||||||
| @ -24,21 +25,29 @@ def isOldStyleBridge(brName): | |||||||
|        return True |        return True | ||||||
|     else: |     else: | ||||||
|        return False |        return False | ||||||
|  | def isNewStyleBridge(brName): | ||||||
|  |     if re.match(r"br(\w+)-(\d+)", brName) == None: | ||||||
|  |        return False | ||||||
|  |     else: | ||||||
|  |        return True | ||||||
| def getGuestNetworkDevice(): | def getGuestNetworkDevice(): | ||||||
|     netlib = networkConfig()  |     netlib = networkConfig()  | ||||||
|     cfo = configFileOps("/etc/cloudstack/agent/agent.properties") |     cfo = configFileOps("/etc/cloudstack/agent/agent.properties") | ||||||
|     guestDev = cfo.getEntry("guest.network.device") |     guestDev = cfo.getEntry("guest.network.device") | ||||||
|     enslavedDev = netlib.getEnslavedDev(guestDev, 1) |     enslavedDev = netlib.getEnslavedDev(guestDev, 1) | ||||||
|     return enslavedDev  |     return enslavedDev.split(".")[0] | ||||||
| def handleMigrateBegin(): | def handleMigrateBegin(): | ||||||
|     try: |     try: | ||||||
|         domain = parse(sys.stdin) |         domain = parse(sys.stdin) | ||||||
|         for interface in domain.getElementsByTagName("interface"): |         for interface in domain.getElementsByTagName("interface"): | ||||||
|             source = interface.getElementsByTagName("source")[0] |             source = interface.getElementsByTagName("source")[0] | ||||||
|             bridge = source.getAttribute("bridge") |             bridge = source.getAttribute("bridge") | ||||||
|             if not isOldStyleBridge(bridge): |             if isOldStyleBridge(bridge): | ||||||
|                 continue |  | ||||||
|                 vlanId = bridge.replace("cloudVirBr","") |                 vlanId = bridge.replace("cloudVirBr","") | ||||||
|  |             elif isNewStyleBridge(bridge): | ||||||
|  |                 vlanId = re.sub(r"br(\w+)-","",bridge) | ||||||
|  |             else: | ||||||
|  |                 continue | ||||||
|             phyDev = getGuestNetworkDevice() |             phyDev = getGuestNetworkDevice() | ||||||
|             newBrName="br" + phyDev + "-" + vlanId |             newBrName="br" + phyDev + "-" + vlanId | ||||||
|             source.setAttribute("bridge", newBrName) |             source.setAttribute("bridge", newBrName) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user