Skip to content

Commit 8977d3d

Browse files
committed
Fix load balancer rule VMs from multiple VPC tiers on Conserve mode
1 parent 292a184 commit 8977d3d

File tree

12 files changed

+190
-42
lines changed

12 files changed

+190
-42
lines changed

api/src/main/java/com/cloud/network/lb/LoadBalancingRulesService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ LoadBalancer createPublicLoadBalancerRule(String xId, String name, String descri
108108
/**
109109
* Assign a virtual machine or list of virtual machines, or Map of <vmId vmIp> to a load balancer.
110110
*/
111-
boolean assignToLoadBalancer(long lbRuleId, List<Long> vmIds, Map<Long, List<String>> vmIdIpMap, boolean isAutoScaleVM);
111+
boolean assignToLoadBalancer(long lbRuleId, List<Long> vmIds, Map<Long, List<String>> vmIdIpMap, Map<Long, Long> vmIdNetworkMap, boolean isAutoScaleVM);
112112

113113
boolean assignSSLCertToLoadBalancerRule(Long lbRuleId, String certName, String publicCert, String privateKey);
114114

api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.util.List;
2424
import java.util.Map;
2525

26+
import com.cloud.network.Network;
27+
import com.cloud.utils.Pair;
2628
import com.cloud.utils.exception.CloudRuntimeException;
2729

2830
import org.apache.cloudstack.api.APICommand;
@@ -72,7 +74,7 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd {
7274

7375
@Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID_IP,
7476
type = CommandType.MAP,
75-
description = "VM ID and IP map, vmidipmap[0].vmid=1 vmidipmap[0].vmip=10.1.1.75",
77+
description = "VM ID and IP map, vmidipmap[0].vmid=1 vmidipmap[0].vmip=10.1.1.75. (Optional, for VPC Conserve Mode) Pass vmnetworkid. Example: vmidipmap[0].vmnetworkid=NETWORK_TIER_UUID",
7678
since = "4.4")
7779
private Map vmIdIpMap;
7880

@@ -116,15 +118,17 @@ public String getEventDescription() {
116118
}
117119

118120

119-
public Map<Long, List<String>> getVmIdIpListMap() {
120-
Map<Long, List<String>> vmIdIpsMap = new HashMap<Long, List<String>>();
121+
public Pair<Map<Long, List<String>>, Map<Long, Long>> getVmIdIpListMapAndVmIdNetworkMap() {
122+
Map<Long, List<String>> vmIdIpsMap = new HashMap<>();
123+
Map<Long, Long> vmIdNetworkMap = new HashMap<>();
121124
if (vmIdIpMap != null && !vmIdIpMap.isEmpty()) {
122125
Collection idIpsCollection = vmIdIpMap.values();
123126
Iterator iter = idIpsCollection.iterator();
124127
while (iter.hasNext()) {
125128
HashMap<String, String> idIpsMap = (HashMap<String, String>)iter.next();
126129
String vmId = idIpsMap.get("vmid");
127130
String vmIp = idIpsMap.get("vmip");
131+
String vmNetworkUuid = idIpsMap.get("vmnetworkid");
128132

129133
VirtualMachine lbvm = _entityMgr.findByUuid(VirtualMachine.class, vmId);
130134
if (lbvm == null) {
@@ -145,25 +149,35 @@ public Map<Long, List<String>> getVmIdIpListMap() {
145149
ipsList = new ArrayList<String>();
146150
}
147151
ipsList.add(vmIp);
152+
153+
if (vmNetworkUuid != null) {
154+
Network vmNetwork = _entityMgr.findByUuid(Network.class, vmNetworkUuid);
155+
if (vmNetwork == null) {
156+
throw new InvalidParameterValueException("Unable to find Network ID: " + vmNetworkUuid);
157+
}
158+
vmIdNetworkMap.put(longVmId, vmNetwork.getId());
159+
}
148160
vmIdIpsMap.put(longVmId, ipsList);
149161

150162
}
151163
}
152164

153-
return vmIdIpsMap;
165+
return new Pair<>(vmIdIpsMap, vmIdNetworkMap);
154166
}
155167

156168
@Override
157169
public void execute() {
158170
CallContext.current().setEventDetails("Load balancer ID: " + getResourceUuid(ApiConstants.ID) + " Instances IDs: " + StringUtils.join(getVirtualMachineIds(), ","));
159171

160-
Map<Long, List<String>> vmIdIpsMap = getVmIdIpListMap();
172+
Pair<Map<Long, List<String>>, Map<Long, Long>> mapsPair = getVmIdIpListMapAndVmIdNetworkMap();
173+
Map<Long, List<String>> vmIdIpsMap = mapsPair.first();
174+
Map<Long, Long> vmIdNetworkMap = mapsPair.second();
161175
boolean result = false;
162176

163177
try {
164-
result = _lbService.assignToLoadBalancer(getLoadBalancerId(), virtualMachineIds, vmIdIpsMap, false);
178+
result = _lbService.assignToLoadBalancer(getLoadBalancerId(), virtualMachineIds, vmIdIpsMap, vmIdNetworkMap, false);
165179
}catch (CloudRuntimeException ex) {
166-
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to assign load balancer rule");
180+
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to assign load balancer rule due to: " + ex.getMessage());
167181
}
168182

169183
if (result) {

api/src/main/java/org/apache/cloudstack/api/response/FirewallRuleResponse.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ public class FirewallRuleResponse extends BaseResponse {
9494
@Param(description = "The ID of the guest Network the port forwarding rule belongs to")
9595
private String networkId;
9696

97+
@SerializedName(ApiConstants.NETWORK_NAME)
98+
@Param(description = "The Name of the guest Network the port forwarding rule belongs to")
99+
private String networkName;
100+
97101
@SerializedName(ApiConstants.FOR_DISPLAY)
98102
@Param(description = "Is firewall for display to the regular user", since = "4.4", authorized = {RoleType.Admin})
99103
private Boolean forDisplay;
@@ -223,6 +227,10 @@ public void setNetworkId(String networkId) {
223227
this.networkId = networkId;
224228
}
225229

230+
public void setNetworkName(String networkName) {
231+
this.networkName = networkName;
232+
}
233+
226234
public void setForDisplay(Boolean forDisplay) {
227235
this.forDisplay = forDisplay;
228236
}

plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ protected void provisionLoadBalancerRule(final IpAddress publicIp, final Network
660660
ips.add(controlVmNic.getIPv4Address());
661661
vmIdIpMap.put(clusterVMIds.get(i), ips);
662662
}
663-
lbService.assignToLoadBalancer(lb.getId(), null, vmIdIpMap, false);
663+
lbService.assignToLoadBalancer(lb.getId(), null, vmIdIpMap, null, false);
664664
}
665665

666666
protected Map<Long, Integer> createFirewallRules(IpAddress publicIp, List<Long> clusterVMIds, boolean apiRule) throws ManagementServerException {

server/src/main/java/com/cloud/api/ApiResponseHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1675,7 +1675,7 @@ public FirewallRuleResponse createPortForwardingRuleResponse(PortForwardingRule
16751675

16761676
Network guestNtwk = ApiDBUtils.findNetworkById(fwRule.getNetworkId());
16771677
response.setNetworkId(guestNtwk.getUuid());
1678-
1678+
response.setNetworkName(guestNtwk.getName());
16791679

16801680
IpAddress ip = ApiDBUtils.findIpAddressById(fwRule.getSourceIpAddressId());
16811681

server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2051,7 +2051,7 @@ private boolean assignLBruleToNewVm(long vmId, AutoScaleVmGroupVO asGroup) {
20512051
}
20522052
lstVmId.add(new Long(vmId));
20532053
try {
2054-
return loadBalancingRulesService.assignToLoadBalancer(lbId, lstVmId, new HashMap<>(), true);
2054+
return loadBalancingRulesService.assignToLoadBalancer(lbId, lstVmId, new HashMap<>(), null, true);
20552055
} catch (CloudRuntimeException ex) {
20562056
logger.warn("Caught exception: ", ex);
20572057
return false;

server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java

Lines changed: 66 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@
5353
import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDao;
5454
import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
5555
import org.apache.commons.collections.CollectionUtils;
56+
import org.apache.commons.collections4.MapUtils;
57+
import org.apache.commons.lang3.ObjectUtils;
5658
import org.apache.commons.lang3.StringUtils;
5759

5860
import com.cloud.agent.api.to.LoadBalancerTO;
@@ -1018,7 +1020,7 @@ private boolean isRollBackAllowedForProvider(LoadBalancerVO loadBalancer) {
10181020
@Override
10191021
@DB
10201022
@ActionEvent(eventType = EventTypes.EVENT_ASSIGN_TO_LOAD_BALANCER_RULE, eventDescription = "assigning to load balancer", async = true)
1021-
public boolean assignToLoadBalancer(long loadBalancerId, List<Long> instanceIds, Map<Long, List<String>> vmIdIpMap, boolean isAutoScaleVM) {
1023+
public boolean assignToLoadBalancer(long loadBalancerId, List<Long> instanceIds, Map<Long, List<String>> vmIdIpMap, Map<Long, Long> vmIdNetworkMap, boolean isAutoScaleVM) {
10221024
CallContext ctx = CallContext.current();
10231025
Account caller = ctx.getCallingAccount();
10241026

@@ -1091,28 +1093,12 @@ public boolean assignToLoadBalancer(long loadBalancerId, List<Long> instanceIds,
10911093
_rulesMgr.checkRuleAndUserVm(loadBalancer, vm, caller);
10921094

10931095
Account vmOwner = _accountDao.findById(vm.getAccountId());
1094-
Network network = _networkDao.findById(loadBalancer.getNetworkId());
1095-
_accountMgr.checkAccess(vmOwner, SecurityChecker.AccessType.UseEntry, false, network);
1096-
1097-
// Let's check to make sure the vm has a nic in the same network as
1098-
// the load balancing rule.
1099-
List<? extends Nic> nics = _networkModel.getNics(vm.getId());
1100-
Nic nicInSameNetwork = null;
1101-
for (Nic nic : nics) {
1102-
if (nic.getNetworkId() == loadBalancer.getNetworkId()) {
1103-
nicInSameNetwork = nic;
1104-
break;
1105-
}
1106-
}
1096+
Network loadBalancerNetwork = _networkDao.findById(loadBalancer.getNetworkId());
1097+
_accountMgr.checkAccess(vmOwner, SecurityChecker.AccessType.UseEntry, false, loadBalancerNetwork);
11071098

1108-
if (nicInSameNetwork == null) {
1109-
InvalidParameterValueException ex =
1110-
new InvalidParameterValueException("VM with id specified cannot be added because it doesn't belong in the same network.");
1111-
ex.addProxyObject(vm.getUuid(), "instanceId");
1112-
throw ex;
1113-
}
1099+
Nic vmNicInLb = getVmNicInLoadBalancer(vm, loadBalancer, loadBalancerNetwork, vmIdNetworkMap, vmOwner);
11141100

1115-
String priIp = nicInSameNetwork.getIPv4Address();
1101+
String priIp = vmNicInLb.getIPv4Address();
11161102

11171103
if (existingVmIdIps.containsKey(instanceId)) {
11181104
// now check for ip address
@@ -1142,9 +1128,9 @@ public boolean assignToLoadBalancer(long loadBalancerId, List<Long> instanceIds,
11421128
if (ip.equals(priIp)) {
11431129
continue;
11441130
}
1145-
if(_nicSecondaryIpDao.findByIp4AddressAndNicId(ip,nicInSameNetwork.getId()) == null) {
1131+
if(_nicSecondaryIpDao.findByIp4AddressAndNicId(ip,vmNicInLb.getId()) == null) {
11461132
throw new InvalidParameterValueException("Instance IP "+ ip + " specified does not belong to " +
1147-
"NIC in Network " + nicInSameNetwork.getNetworkId());
1133+
"NIC in Network " + vmNicInLb.getNetworkId());
11481134
}
11491135
}
11501136
} else {
@@ -1234,6 +1220,63 @@ public void doInTransactionWithoutResult(TransactionStatus status) {
12341220
return success;
12351221
}
12361222

1223+
protected Nic getVmNicInLoadBalancer(UserVm vm, LoadBalancerVO loadBalancer, Network loadBalancerNetwork, Map<Long, Long> vmIdNetworkMap, Account vmOwner) {
1224+
boolean isVpcConserveModeEnabled = _vpcMgr.isNetworkOnVpcEnabledConserveMode(loadBalancerNetwork);
1225+
1226+
boolean isNetworkPassedVpcConserveMode = isVpcConserveModeEnabled && MapUtils.isNotEmpty(vmIdNetworkMap) && vmIdNetworkMap.containsKey(vm.getId());
1227+
Nic vmNicInLb = isNetworkPassedVpcConserveMode ?
1228+
getNicForVmInVpcConserveModeTierNetwork(vm, vmIdNetworkMap, vmOwner, loadBalancerNetwork) :
1229+
getNicForVmLbNetwork(vm, loadBalancer);
1230+
1231+
if (vmNicInLb == null) {
1232+
String msg = !isVpcConserveModeEnabled ?
1233+
"VM with id specified cannot be added because it doesn't belong in the same network." :
1234+
"VM with id specified cannot be added to the load balancing rule for VPC Conserve Mode.";
1235+
InvalidParameterValueException ex = new InvalidParameterValueException(msg);
1236+
ex.addProxyObject(vm.getUuid(), "instanceId");
1237+
throw ex;
1238+
}
1239+
return vmNicInLb;
1240+
}
1241+
1242+
/**
1243+
* For Isolated Networks or Network tiers of VPCs not using Conserve mode, use the same network as the load balancer
1244+
* @return the nic of the VM in the load balancer network
1245+
*/
1246+
protected Nic getNicForVmLbNetwork(UserVm vm, LoadBalancerVO loadBalancer) {
1247+
List<? extends Nic> nics = _networkModel.getNics(vm.getId());
1248+
for (Nic nic : nics) {
1249+
if (nic.getNetworkId() == loadBalancer.getNetworkId()) {
1250+
return nic;
1251+
}
1252+
}
1253+
return null;
1254+
}
1255+
1256+
/**
1257+
* On VPC Conserve Mode, VMs from multiple VPC networks tiers can be assigned to the same load balancer.
1258+
* @return the nic of the VM in the specified tier network in `vmIdNetworkMap`
1259+
*/
1260+
protected Nic getNicForVmInVpcConserveModeTierNetwork(UserVm vm, Map<Long, Long> vmIdNetworkMap, Account vmOwner, Network loadBalancerNetwork) {
1261+
Long vmNetworkId = vmIdNetworkMap.get(vm.getId());
1262+
Network vmNetwork = _networkDao.findById(vmNetworkId);
1263+
_accountMgr.checkAccess(vmOwner, SecurityChecker.AccessType.UseEntry, false, vmNetwork);
1264+
checkNetworkBelongsToLoadBalancerVpc(vmNetwork, loadBalancerNetwork);
1265+
return _networkModel.getNicInNetwork(vm.getId(), vmNetworkId);
1266+
}
1267+
1268+
protected void checkNetworkBelongsToLoadBalancerVpc(Network vmNetwork, Network loadBalancerNetwork) {
1269+
if (ObjectUtils.anyNull(vmNetwork, loadBalancerNetwork)) {
1270+
throw new InvalidParameterValueException("Cannot add VM to load balancer because the VM network or load balancer network is null");
1271+
}
1272+
if (ObjectUtils.anyNull(vmNetwork.getVpcId(), loadBalancerNetwork.getVpcId())) {
1273+
throw new InvalidParameterValueException("Cannot add VM to load balancer because the VM network or load balancer network are not part of a VPC");
1274+
}
1275+
if (!vmNetwork.getVpcId().equals(loadBalancerNetwork.getVpcId())) {
1276+
throw new InvalidParameterValueException("Cannot add VM to load balancer because the VM network and load balancer network are not part of the same VPC");
1277+
}
1278+
}
1279+
12371280
@Override
12381281
public boolean assignSSLCertToLoadBalancerRule(Long lbId, String certName, String publicCert, String privateKey) {
12391282
logger.error("Calling the manager for LB");

server/src/test/java/com/cloud/network/as/AutoScaleManagerImplTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,13 +1510,13 @@ public void testDoScaleUp() throws ResourceUnavailableException, InsufficientCap
15101510
when(lbVmMapDao.listByLoadBalancerId(loadBalancerId)).thenReturn(Arrays.asList(loadBalancerVMMapMock));
15111511
when(loadBalancerVMMapMock.getInstanceId()).thenReturn(virtualMachineId + 1);
15121512

1513-
when(loadBalancingRulesService.assignToLoadBalancer(anyLong(), any(), any(), eq(true))).thenReturn(true);
1513+
when(loadBalancingRulesService.assignToLoadBalancer(anyLong(), any(), any(), any(), eq(true))).thenReturn(true);
15141514
Mockito.doReturn(new Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>>(userVmMock, null)).when(userVmMgr).startVirtualMachine(virtualMachineId, null, new HashMap<>(), null);
15151515

15161516
autoScaleManagerImplSpy.doScaleUp(vmGroupId, 1);
15171517

15181518
Mockito.verify(autoScaleManagerImplSpy).createNewVM(asVmGroupMock);
1519-
Mockito.verify(loadBalancingRulesService).assignToLoadBalancer(anyLong(), any(), any(), eq(true));
1519+
Mockito.verify(loadBalancingRulesService).assignToLoadBalancer(anyLong(), any(), any(), any(), eq(true));
15201520
Mockito.verify(userVmMgr).startVirtualMachine(virtualMachineId, null, new HashMap<>(), null);
15211521
}
15221522
}

server/src/test/java/com/cloud/network/lb/AssignLoadBalancerTest.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.cloud.network.dao.NetworkDao;
3333
import com.cloud.network.rules.FirewallRule;
3434
import com.cloud.network.rules.RulesManagerImpl;
35+
import com.cloud.network.vpc.VpcManager;
3536
import com.cloud.user.Account;
3637
import com.cloud.user.AccountManager;
3738
import com.cloud.user.AccountVO;
@@ -146,7 +147,7 @@ public void testBothArgsEmpty() throws ResourceAllocationException, ResourceUnav
146147
when(lbdao.findById(anyLong())).thenReturn(Mockito.mock(LoadBalancerVO.class));
147148
when(autoScaleVmGroupDao.isAutoScaleLoadBalancer(anyLong())).thenReturn(Boolean.FALSE);
148149

149-
_lbMgr.assignToLoadBalancer(1L, null, emptyMap, false);
150+
_lbMgr.assignToLoadBalancer(1L, null, emptyMap, null, false);
150151

151152
}
152153

@@ -171,6 +172,7 @@ public void testNicIsNotInNw() throws ResourceAllocationException, ResourceUnava
171172
NetworkDao networkDao = Mockito.mock(NetworkDao.class);
172173
AccountManager accountMgr = Mockito.mock(AccountManager.class);
173174
AutoScaleVmGroupDao autoScaleVmGroupDao = Mockito.mock(AutoScaleVmGroupDao.class);
175+
VpcManager vpcMgr = Mockito.mock(VpcManager.class);
174176

175177
_lbMgr._lbDao = lbDao;
176178
_lbMgr._lb2VmMapDao = lb2VmMapDao;
@@ -182,15 +184,17 @@ public void testNicIsNotInNw() throws ResourceAllocationException, ResourceUnava
182184
_lbMgr._rulesMgr = _rulesMgr;
183185
_lbMgr._networkModel = _networkModel;
184186
_lbMgr._autoScaleVmGroupDao = autoScaleVmGroupDao;
187+
_lbMgr._vpcMgr = vpcMgr;
185188

186189
when(lbDao.findById(anyLong())).thenReturn(Mockito.mock(LoadBalancerVO.class));
187190
when(userVmDao.findById(anyLong())).thenReturn(vm);
188191
when(lb2VmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(_lbvmMapList);
189192
when(accountDao.findById(anyLong())).thenReturn(Mockito.mock(AccountVO.class));
190193
Mockito.doNothing().when(accountMgr).checkAccess(any(Account.class), any(SecurityChecker.AccessType.class), any(Boolean.class), any(Network.class));
191194
when(autoScaleVmGroupDao.isAutoScaleLoadBalancer(anyLong())).thenReturn(Boolean.FALSE);
195+
when(vpcMgr.isNetworkOnVpcEnabledConserveMode(any())).thenReturn(false);
192196

193-
_lbMgr.assignToLoadBalancer(1L, null, vmIdIpMap, false);
197+
_lbMgr.assignToLoadBalancer(1L, null, vmIdIpMap, null, false);
194198
}
195199

196200

@@ -218,6 +222,7 @@ public void tesSecIpNotSetToVm() throws ResourceAllocationException, ResourceUna
218222
AccountManager accountMgr = Mockito.mock(AccountManager.class);
219223
NicSecondaryIpDao nicSecIpDao = Mockito.mock(NicSecondaryIpDao.class);
220224
AutoScaleVmGroupDao autoScaleVmGroupDao = Mockito.mock(AutoScaleVmGroupDao.class);
225+
VpcManager vpcMgr = Mockito.mock(VpcManager.class);
221226

222227
_lbMgr._lbDao = lbDao;
223228
_lbMgr._lb2VmMapDao = lb2VmMapDao;
@@ -230,14 +235,16 @@ public void tesSecIpNotSetToVm() throws ResourceAllocationException, ResourceUna
230235
_lbMgr._rulesMgr = _rulesMgr;
231236
_lbMgr._networkModel = _networkModel;
232237
_lbMgr._autoScaleVmGroupDao = autoScaleVmGroupDao;
238+
_lbMgr._vpcMgr = vpcMgr;
233239

234240
when(lbDao.findById(anyLong())).thenReturn(lbVO);
235241
when(userVmDao.findById(anyLong())).thenReturn(vm);
236242
when(lb2VmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(_lbvmMapList);
237243
when (nicSecIpDao.findByIp4AddressAndNicId(anyString(), anyLong())).thenReturn(null);
238244
when(autoScaleVmGroupDao.isAutoScaleLoadBalancer(anyLong())).thenReturn(Boolean.FALSE);
245+
when(vpcMgr.isNetworkOnVpcEnabledConserveMode(any())).thenReturn(false);
239246

240-
_lbMgr.assignToLoadBalancer(1L, null, vmIdIpMap, false);
247+
_lbMgr.assignToLoadBalancer(1L, null, vmIdIpMap, null, false);
241248
}
242249

243250

@@ -267,6 +274,7 @@ public void testVmIdAlreadyExist() throws ResourceAllocationException, ResourceU
267274
NicSecondaryIpDao nicSecIpDao = Mockito.mock(NicSecondaryIpDao.class);
268275
LoadBalancerVMMapVO lbVmMapVO = new LoadBalancerVMMapVO(1L, 1L, "10.1.1.175", false);
269276
AutoScaleVmGroupDao autoScaleVmGroupDao = Mockito.mock(AutoScaleVmGroupDao.class);
277+
VpcManager vpcMgr = Mockito.mock(VpcManager.class);
270278

271279
_lbMgr._lbDao = lbDao;
272280
_lbMgr._lb2VmMapDao = lb2VmMapDao;
@@ -280,14 +288,16 @@ public void testVmIdAlreadyExist() throws ResourceAllocationException, ResourceU
280288
_lbMgr._rulesMgr = _rulesMgr;
281289
_lbMgr._networkModel = _networkModel;
282290
_lbMgr._autoScaleVmGroupDao = autoScaleVmGroupDao;
291+
_lbMgr._vpcMgr = vpcMgr;
283292

284293
when(lbDao.findById(anyLong())).thenReturn(lbVO);
285294
when(userVmDao.findById(anyLong())).thenReturn(vm);
286295
when(lb2VmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(_lbvmMapList);
287296
when (nicSecIpDao.findByIp4AddressAndNicId(anyString(), anyLong())).thenReturn(null);
288297
when(autoScaleVmGroupDao.isAutoScaleLoadBalancer(anyLong())).thenReturn(Boolean.FALSE);
298+
when(vpcMgr.isNetworkOnVpcEnabledConserveMode(any())).thenReturn(false);
289299

290-
_lbMgr.assignToLoadBalancer(1L, null, vmIdIpMap, false);
300+
_lbMgr.assignToLoadBalancer(1L, null, vmIdIpMap, null, false);
291301
}
292302

293303
@After

0 commit comments

Comments
 (0)