diff --git a/server/src/com/cloud/network/guru/DirectNetworkGuru.java b/server/src/com/cloud/network/guru/DirectNetworkGuru.java index c92bb45dfef..3edc8d217d1 100644 --- a/server/src/com/cloud/network/guru/DirectNetworkGuru.java +++ b/server/src/com/cloud/network/guru/DirectNetworkGuru.java @@ -133,9 +133,20 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { return TrafficTypes; } + /** + * True for Advanced zones, with VXLAN isolation method and Security Groups enabled + */ + private boolean isMyIsolationMethodVxlanWithSecurityGroups(NetworkOffering offering, DataCenter dc, PhysicalNetwork physnet) { + return dc.getNetworkType().equals(NetworkType.Advanced) && + _networkModel.areServicesSupportedByNetworkOffering(offering.getId(), Service.SecurityGroup) && + physnet.getIsolationMethods().contains("VXLAN"); + } + protected boolean canHandle(NetworkOffering offering, DataCenter dc, PhysicalNetwork physnet) { // this guru handles only Guest networks in Advance zone with source nat service disabled - if (dc.getNetworkType() == NetworkType.Advanced && isMyTrafficType(offering.getTrafficType()) && isMyIsolationMethod(physnet) && offering.getGuestType() == GuestType.Shared + boolean vxlanWithSecurityGroups = isMyIsolationMethodVxlanWithSecurityGroups(offering, dc, physnet); + if (dc.getNetworkType() == NetworkType.Advanced && isMyTrafficType(offering.getTrafficType()) && + (isMyIsolationMethod(physnet) || vxlanWithSecurityGroups) && offering.getGuestType() == GuestType.Shared && !_ntwkOfferingSrvcDao.isProviderForNetworkOffering(offering.getId(), Network.Provider.NuageVsp) && !_ntwkOfferingSrvcDao.isProviderForNetworkOffering(offering.getId(), Network.Provider.NiciraNvp)) { return true;