Skip to content

Commit 13cafbd

Browse files
Pearl1594nvazquez
andcommitted
Use the previously assigned vNet for Netris Network when it transitions to Implemented state after gc
* Use the previously assigned vNet for Netris Network when it transitions to Implemented state after gc * Fix unit tests --------- Co-authored-by: nvazquez <[email protected]>
1 parent d175893 commit 13cafbd

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,6 +1187,7 @@ public class ApiConstants {
11871187
public static final String NSX_DETAIL_KEY = "forNsx";
11881188
public static final String NETRIS_DETAIL_KEY = "forNetris";
11891189
public static final String NETRIS_TAG = "netristag";
1190+
public static final String NETRIS_VXLAN_ID = "netrisvxlanid";
11901191
public static final String DISK_PATH = "diskpath";
11911192
public static final String IMPORT_SOURCE = "importsource";
11921193
public static final String TEMP_PATH = "temppath";

plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import com.cloud.network.Networks;
3333
import com.cloud.network.PhysicalNetwork;
3434
import com.cloud.network.PublicIpAddress;
35+
import com.cloud.network.dao.NetworkDetailVO;
36+
import com.cloud.network.dao.NetworkDetailsDao;
3537
import com.cloud.network.dao.NetworkVO;
3638
import com.cloud.network.dao.PhysicalNetworkVO;
3739
import com.cloud.network.guru.GuestNetworkGuru;
@@ -47,6 +49,7 @@
4749
import com.cloud.vm.VirtualMachine;
4850
import com.cloud.vm.VirtualMachineProfile;
4951
import org.apache.cloudstack.api.ApiCommandResourceType;
52+
import org.apache.cloudstack.api.ApiConstants;
5053
import org.apache.cloudstack.context.CallContext;
5154

5255
import javax.inject.Inject;
@@ -61,6 +64,8 @@ public class NetrisGuestNetworkGuru extends GuestNetworkGuru implements Network
6164
private NetrisService netrisService;
6265
@Inject
6366
NetworkModel networkModel;
67+
@Inject
68+
NetworkDetailsDao networkDetailsDao;
6469

6570
public NetrisGuestNetworkGuru() {
6671
super();
@@ -203,14 +208,21 @@ public Network implement(Network network, NetworkOffering offering, DeployDestin
203208
@Override
204209
protected void allocateVnet(Network network, NetworkVO implemented, long dcId, long physicalNetworkId, String reservationId)
205210
throws InsufficientVirtualNetworkCapacityException {
211+
String vnet = null;
212+
Long networkId = implemented.getId() > 0 ? implemented.getId() : network.getId();
206213
if (network.getBroadcastUri() == null) {
207-
String vnet = _dcDao.allocateVnet(dcId, physicalNetworkId, network.getAccountId(), reservationId, UseSystemGuestVlans.valueIn(network.getAccountId()));
208-
if (vnet == null) {
209-
throw new InsufficientVirtualNetworkCapacityException("Unable to allocate vnet as a " + "part of network " + network + " implement ", DataCenter.class,
210-
dcId);
214+
NetworkDetailVO netrisVnetDetail = networkDetailsDao.findDetail(networkId, ApiConstants.NETRIS_VXLAN_ID);
215+
if (nonNull(netrisVnetDetail)) {
216+
vnet = netrisVnetDetail.getValue();
217+
} else {
218+
vnet = _dcDao.allocateVnet(dcId, physicalNetworkId, network.getAccountId(), reservationId, UseSystemGuestVlans.valueIn(network.getAccountId()));
219+
if (vnet == null) {
220+
throw new InsufficientVirtualNetworkCapacityException("Unable to allocate vnet as a " + "part of network " + network + " implement ", DataCenter.class,
221+
dcId);
222+
}
223+
networkDetailsDao.addDetail(networkId, ApiConstants.NETRIS_VXLAN_ID, vnet, true);
211224
}
212225
implemented.setBroadcastUri(Networks.BroadcastDomainType.Netris.toUri(vnet));
213-
Long networkId = implemented.getId() > 0 ? implemented.getId() : network.getId();
214226
ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VXLAN_ASSIGN,
215227
"Assigned Zone vNet: " + vnet + " Network Id: " + networkId, networkId, ApiCommandResourceType.Network.toString(), 0);
216228
} else {

plugins/network-elements/netris/src/test/java/org/apache/cloudstack/service/NetrisGuestNetworkGuruTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.cloud.network.Network;
2929
import com.cloud.network.NetworkModel;
3030
import com.cloud.network.Networks;
31+
import com.cloud.network.dao.NetworkDetailsDao;
3132
import com.cloud.network.dao.NetworkVO;
3233
import com.cloud.network.dao.PhysicalNetworkDao;
3334
import com.cloud.network.dao.PhysicalNetworkVO;
@@ -78,6 +79,8 @@ public class NetrisGuestNetworkGuruTest {
7879
private VpcDao vpcDao;
7980
@Mock
8081
private NetrisService netrisService;
82+
@Mock
83+
private NetworkDetailsDao networkDetailsDao;
8184

8285
@Spy
8386
@InjectMocks
@@ -219,6 +222,7 @@ public void testImplementNetrisVpcNetwork() throws InsufficientVirtualNetworkCap
219222
Mockito.when(dataCenterDao.allocateVnet(Mockito.eq(zoneId), Mockito.eq(physicalNetworkId),
220223
Mockito.eq(accountId), Mockito.nullable(String.class), Mockito.anyBoolean())).thenReturn(vnet);
221224
actionEventUtilsMocked.when(() -> ActionEventUtils.onCompletedActionEvent(Mockito.anyLong(), Mockito.anyLong(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyLong(), Mockito.anyString(), Mockito.anyLong())).thenReturn(1L);
225+
Mockito.when(networkDetailsDao.findDetail(Mockito.anyLong(), Mockito.anyString())).thenReturn(null);
222226
Network implemented = guru.implement(network, networkOffering, destination, context);
223227
Assert.assertEquals(String.format("netris://%s", vnet), implemented.getBroadcastUri().toString());
224228
Assert.assertEquals(Network.State.Implemented, implemented.getState());

0 commit comments

Comments
 (0)