From 6bd9d1241b7ec5cf1566bef89846bad3850af875 Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Thu, 19 Jun 2014 16:03:46 +0530 Subject: [PATCH] CLOUDSTACK-6750: [OVS] With stretched network deploying vm in a ovs disabled zone does not fail Fix ensures that connectivity service provider is enabled in the zone on to which nework is being streched. (cherry picked from commit d8cbba1bc616d43e218229a2807915c1b21569dc) --- .../src/com/cloud/vm/UserVmManagerImpl.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 673e03514d3..02be03c2101 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2716,8 +2716,29 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir boolean securityGroupEnabled = false; boolean vpcNetwork = false; for (NetworkVO network : networkList) { - if ((network.getDataCenterId() != zone.getId()) && !network.isStrechedL2Network()) { - throw new InvalidParameterValueException("Network id=" + network.getId() + " doesn't belong to zone " + zone.getId()); + if ((network.getDataCenterId() != zone.getId())) { + if (!network.isStrechedL2Network()) { + throw new InvalidParameterValueException("Network id=" + network.getId() + + " doesn't belong to zone " + zone.getId()); + } + + NetworkOffering ntwkOffering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + Long physicalNetworkId = _networkModel.findPhysicalNetworkId(zone.getId(), ntwkOffering.getTags(), + ntwkOffering.getTrafficType()); + if (physicalNetworkId == null) { + s_logger.warn("Network id " + network.getId() + " could not be streched to the zone " + zone.getId() + + " as valid phyical network could not be found"); + throw new InvalidParameterValueException("Network in which is VM getting deployed could not be" + + " streched to the zone."); + } + + String provider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.Connectivity); + if (!_networkModel.isProviderEnabledInPhysicalNetwork(physicalNetworkId, provider)) { + s_logger.warn("Network id " + network.getId() + " could not be streched to the zone " +zone.getId() + + " as Connectivity service provider is not enabled in the zone " + zone.getId()); + throw new InvalidParameterValueException("Network in which is VM getting deployed could not be" + + " streched to the zone."); + } } //relax the check if the caller is admin account