Merge pull request #736 from ustcweizhou/CLOUDSTACK-8765

CLOUDSTACK-8765: fix vm migration failure due to different dev name on KVM

* pr/736:
  CLOUDSTACK-8765: fix vm migration failure due to different dev name on KVM

Signed-off-by: Remi Bergsma <github@remi.nl>
This commit is contained in:
Remi Bergsma 2015-08-26 11:29:23 +02:00
commit 002296ac4f

View File

@ -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):
vlanId = bridge.replace("cloudVirBr","")
elif isNewStyleBridge(bridge):
vlanId = re.sub(r"br(\w+)-","",bridge)
else:
continue continue
vlanId = bridge.replace("cloudVirBr","")
phyDev = getGuestNetworkDevice() phyDev = getGuestNetworkDevice()
newBrName="br" + phyDev + "-" + vlanId newBrName="br" + phyDev + "-" + vlanId
source.setAttribute("bridge", newBrName) source.setAttribute("bridge", newBrName)