Skip to content

Commit 5bdca1f

Browse files
committed
Fix NIC allocation to router
1 parent 80f6a5b commit 5bdca1f

File tree

1 file changed

+38
-25
lines changed

1 file changed

+38
-25
lines changed

engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1475,39 +1475,52 @@ public void orchestrateStart(final String vmUuid, final Map<VirtualMachineProfil
14751475
}
14761476

14771477
public void setVmNetworkDetails(VMInstanceVO vm, VirtualMachineTO vmTO) {
1478+
Map<Long, String> networkToNetworkNameMap = new HashMap<>();
14781479
if (VirtualMachine.Type.User.equals(vm.getType())) {
14791480
List<UserVmJoinVO> userVmJoinVOs = userVmJoinDao.searchByIds(vm.getId());
1480-
Map<Long, String> networkToNetworkNameMap = new HashMap<>();
14811481
if (userVmJoinVOs != null && !userVmJoinVOs.isEmpty()) {
14821482
for (UserVmJoinVO userVmJoinVO : userVmJoinVOs) {
1483-
NetworkVO networkVO = _networkDao.findById(userVmJoinVO.getNetworkId());
1484-
Account acc = accountDao.findById(networkVO.getAccountId());
1485-
Domain domain = domainDao.findById(networkVO.getDomainId());
1486-
DataCenter zone = _dcDao.findById(vm.getDataCenterId());
1487-
if (Objects.isNull(zone)) {
1488-
throw new CloudRuntimeException(String.format("Failed to find zone with ID: %s", vm.getDataCenterId()));
1489-
}
1490-
if (Objects.isNull(acc)) {
1491-
throw new CloudRuntimeException(String.format("Failed to find account with ID: %s", networkVO.getAccountId()));
1492-
}
1493-
if (Objects.isNull(domain)) {
1494-
throw new CloudRuntimeException(String.format("Failed to find domain with ID: %s", networkVO.getDomainId()));
1495-
}
1496-
String networkName = String.format("D%s-A%s-Z%s", domain.getId(), acc.getId(), zone.getId());
1497-
if (Objects.isNull(networkVO.getVpcId())) {
1498-
networkName += "-S"+networkVO.getId();
1499-
} else {
1500-
VpcVO vpc = vpcDao.findById(networkVO.getVpcId());
1501-
if (Objects.isNull(vpc)) {
1502-
throw new CloudRuntimeException(String.format("Failed to find VPC with ID: %s", networkVO.getVpcId()));
1503-
}
1504-
networkName = String.format("%s-V%s-S%s", networkName, vpc.getId(), networkVO.getId());
1505-
}
1506-
networkToNetworkNameMap.put(networkVO.getId(), networkName);
1483+
addToNetworkNameMap(userVmJoinVO.getNetworkId(), vm.getDataCenterId(), networkToNetworkNameMap);
15071484
}
15081485
vmTO.setNetworkIdToNetworkNameMap(networkToNetworkNameMap);
15091486
}
1487+
} else if (VirtualMachine.Type.DomainRouter.equals(vm.getType())) {
1488+
List<DomainRouterJoinVO> routerJoinVO = domainRouterJoinDao.getRouterByIdAndTrafficType(vm.getId(), Networks.TrafficType.Guest);
1489+
for (DomainRouterJoinVO router : routerJoinVO) {
1490+
NetworkVO guestNetwork = _networkDao.findById(router.getNetworkId());
1491+
if (guestNetwork.getVpcId() == null && guestNetwork.getBroadcastDomainType() == Networks.BroadcastDomainType.NSX) {
1492+
addToNetworkNameMap(router.getNetworkId(), vm.getDataCenterId(), networkToNetworkNameMap);
1493+
}
1494+
}
1495+
vmTO.setNetworkIdToNetworkNameMap(networkToNetworkNameMap);
1496+
}
1497+
}
1498+
1499+
private void addToNetworkNameMap(long networkId, long dataCenterId, Map<Long, String> networkToNetworkNameMap) {
1500+
NetworkVO networkVO = _networkDao.findById(networkId);
1501+
Account acc = accountDao.findById(networkVO.getAccountId());
1502+
Domain domain = domainDao.findById(networkVO.getDomainId());
1503+
DataCenter zone = _dcDao.findById(dataCenterId);
1504+
if (Objects.isNull(zone)) {
1505+
throw new CloudRuntimeException(String.format("Failed to find zone with ID: %s", dataCenterId));
1506+
}
1507+
if (Objects.isNull(acc)) {
1508+
throw new CloudRuntimeException(String.format("Failed to find account with ID: %s", networkVO.getAccountId()));
1509+
}
1510+
if (Objects.isNull(domain)) {
1511+
throw new CloudRuntimeException(String.format("Failed to find domain with ID: %s", networkVO.getDomainId()));
1512+
}
1513+
String networkName = String.format("D%s-A%s-Z%s", domain.getId(), acc.getId(), zone.getId());
1514+
if (Objects.isNull(networkVO.getVpcId())) {
1515+
networkName += "-S"+networkVO.getId();
1516+
} else {
1517+
VpcVO vpc = vpcDao.findById(networkVO.getVpcId());
1518+
if (Objects.isNull(vpc)) {
1519+
throw new CloudRuntimeException(String.format("Failed to find VPC with ID: %s", networkVO.getVpcId()));
1520+
}
1521+
networkName = String.format("%s-V%s-S%s", networkName, vpc.getId(), networkVO.getId());
15101522
}
1523+
networkToNetworkNameMap.put(networkVO.getId(), networkName);
15111524
}
15121525

15131526
private void logBootModeParameters(Map<VirtualMachineProfile.Param, Object> params) {

0 commit comments

Comments
 (0)