CLOUDSTACK-5076: fix wrong bridge name in vm domain xml desc after upgrade from 4.0 or before to 4.2

This commit is contained in:
Wei Zhou 2013-11-08 14:36:48 +01:00
parent 9e6a1eaffe
commit 86976fb298
1 changed files with 16 additions and 0 deletions

View File

@ -205,6 +205,7 @@ import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.GuestDef;
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.GuestResourceDef;
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InputDef;
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InterfaceDef;
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InterfaceDef.guestNetType;
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InterfaceDef.hostNicType;
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.SerialDef;
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.TermPolicy;
@ -4385,6 +4386,21 @@ ServerResource {
try {
dm = conn.domainLookupByName(vmName);
String vmDef = dm.getXMLDesc(0);
LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser();
parser.parseDomainXML(vmDef);
for (InterfaceDef nic :parser.getInterfaces()) {
if ((nic.getNetType() == guestNetType.BRIDGE) && (nic.getBrName().startsWith("cloudVirBr"))) {
try {
int vnetId = Integer.parseInt(nic.getBrName().replaceFirst("cloudVirBr", ""));
String pifName = getPif(_guestBridgeName);
String newBrName = "br" + pifName + "-"+ vnetId;
vmDef = vmDef.replaceAll("'" + nic.getBrName() + "'", "'" + newBrName + "'");
s_logger.debug("VM bridge name is changed from " + nic.getBrName() + " to " + newBrName);
} catch (NumberFormatException e) {
continue;
}
}
}
s_logger.debug(vmDef);
msg = stopVM(conn, vmName);
msg = startVM(conn, vmName, vmDef);