Skip to content

Commit a06530d

Browse files
authored
CLOUDSTACK-10007 Isolation method claim (#2249)
CLOUDSTACK-10007 isolationMethod claiming
1 parent b130e55 commit a06530d

2 files changed

Lines changed: 24 additions & 5 deletions

File tree

server/src/com/cloud/network/guru/DirectNetworkGuru.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import com.cloud.exception.InsufficientCapacityException;
3636
import com.cloud.exception.InsufficientVirtualNetworkCapacityException;
3737
import com.cloud.exception.InvalidParameterValueException;
38+
import com.cloud.network.dao.PhysicalNetworkDao;
39+
import com.cloud.network.dao.PhysicalNetworkVO;
3840
import com.cloud.network.IpAddressManager;
3941
import com.cloud.network.Ipv6AddressManager;
4042
import com.cloud.network.Network;
@@ -46,6 +48,8 @@
4648
import com.cloud.network.Networks.BroadcastDomainType;
4749
import com.cloud.network.Networks.Mode;
4850
import com.cloud.network.Networks.TrafficType;
51+
import com.cloud.network.PhysicalNetwork;
52+
import com.cloud.network.PhysicalNetwork.IsolationMethod;
4953
import com.cloud.network.dao.IPAddressDao;
5054
import com.cloud.network.dao.IPAddressVO;
5155
import com.cloud.network.dao.NetworkVO;
@@ -99,8 +103,11 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru {
99103
IpAddressManager _ipAddrMgr;
100104
@Inject
101105
NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao;
106+
@Inject
107+
PhysicalNetworkDao _physicalNetworkDao;
102108

103109
private static final TrafficType[] TrafficTypes = {TrafficType.Guest};
110+
protected IsolationMethod[] _isolationMethods;
104111

105112
@Override
106113
public boolean isMyTrafficType(TrafficType type) {
@@ -112,14 +119,23 @@ public boolean isMyTrafficType(TrafficType type) {
112119
return false;
113120
}
114121

122+
protected boolean isMyIsolationMethod(PhysicalNetwork physicalNetwork) {
123+
for (IsolationMethod m : _isolationMethods) {
124+
if (physicalNetwork.getIsolationMethods().contains(m.toString())) {
125+
return true;
126+
}
127+
}
128+
return false;
129+
}
130+
115131
@Override
116132
public TrafficType[] getSupportedTrafficType() {
117133
return TrafficTypes;
118134
}
119135

120-
protected boolean canHandle(NetworkOffering offering, DataCenter dc) {
136+
protected boolean canHandle(NetworkOffering offering, DataCenter dc, PhysicalNetwork physnet) {
121137
// this guru handles only Guest networks in Advance zone with source nat service disabled
122-
if (dc.getNetworkType() == NetworkType.Advanced && isMyTrafficType(offering.getTrafficType()) && offering.getGuestType() == GuestType.Shared
138+
if (dc.getNetworkType() == NetworkType.Advanced && isMyTrafficType(offering.getTrafficType()) && isMyIsolationMethod(physnet) && offering.getGuestType() == GuestType.Shared
123139
&& !_ntwkOfferingSrvcDao.isProviderForNetworkOffering(offering.getId(), Network.Provider.NuageVsp)
124140
&& !_ntwkOfferingSrvcDao.isProviderForNetworkOffering(offering.getId(), Network.Provider.NiciraNvp)) {
125141
return true;
@@ -132,8 +148,9 @@ protected boolean canHandle(NetworkOffering offering, DataCenter dc) {
132148
@Override
133149
public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) {
134150
DataCenter dc = _dcDao.findById(plan.getDataCenterId());
151+
PhysicalNetworkVO physnet = _physicalNetworkDao.findById(plan.getPhysicalNetworkId());
135152

136-
if (!canHandle(offering, dc)) {
153+
if (!canHandle(offering, dc, physnet)) {
137154
return null;
138155
}
139156

@@ -190,6 +207,7 @@ public Network design(NetworkOffering offering, DeploymentPlan plan, Network use
190207

191208
protected DirectNetworkGuru() {
192209
super();
210+
_isolationMethods = new IsolationMethod[] { new IsolationMethod("VLAN") };
193211
}
194212

195213
@Override

server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import com.cloud.network.addr.PublicIp;
4848
import com.cloud.network.dao.IPAddressDao;
4949
import com.cloud.network.dao.IPAddressVO;
50+
import com.cloud.network.PhysicalNetwork;
5051
import com.cloud.offering.NetworkOffering;
5152
import com.cloud.offerings.dao.NetworkOfferingDao;
5253
import com.cloud.utils.db.DB;
@@ -83,9 +84,9 @@ public class DirectPodBasedNetworkGuru extends DirectNetworkGuru {
8384
IpAddressManager _ipAddrMgr;
8485

8586
@Override
86-
protected boolean canHandle(NetworkOffering offering, DataCenter dc) {
87+
protected boolean canHandle(NetworkOffering offering, DataCenter dc, PhysicalNetwork physnet) {
8788
// this guru handles system Direct pod based network
88-
if (dc.getNetworkType() == NetworkType.Basic && isMyTrafficType(offering.getTrafficType())) {
89+
if (dc.getNetworkType() == NetworkType.Basic && isMyTrafficType(offering.getTrafficType()) && isMyIsolationMethod(physnet)) {
8990
return true;
9091
} else {
9192
s_logger.trace("We only take care of Guest Direct Pod based networks");

0 commit comments

Comments
 (0)