Enable Autoscaling on Netris for CPU and memory (#51)

* Enable Autoscaling on Netris for CPU and memory

* Fix monitor autoscale group and cleanup

* Rename autoscaling group method

* Integrate Autoscaling by allowing to update LB rules

* Refactor according to the SDK changes
This commit is contained in:
Nicolas Vazquez 2025-02-13 12:14:30 -03:00 committed by GitHub
parent ca4c13c4a0
commit bd4e652128
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 84 additions and 51 deletions

View File

@ -55,6 +55,6 @@ public interface NetrisService {
boolean releaseNatIp(long zoneId, String publicIp);
boolean createLbRule(NetrisNetworkRule rule);
boolean createOrUpdateLbRule(NetrisNetworkRule rule);
boolean deleteLbRule(NetrisNetworkRule rule);
}

View File

@ -459,3 +459,7 @@ CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.static_routes', 'next_hop', 'varchar
-- Add `for_router` to `user_ip_address` table
CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.user_ip_address', 'for_router', 'tinyint(1) DEFAULT 0 COMMENT "True if the ip address is used by Domain Router to expose services"');
-- Add Netris Autoscaling rules
INSERT IGNORE INTO `cloud`.`counter` (uuid, provider, source, name, value, created) VALUES (UUID(), 'Netris', 'cpu', 'VM CPU - average percentage', 'vm.cpu.average.percentage', NOW());
INSERT IGNORE INTO `cloud`.`counter` (uuid, provider, source, name, value, created) VALUES (UUID(), 'Netris', 'memory', 'VM Memory - average percentage', 'vm.memory.average.percentage', NOW());

View File

@ -359,7 +359,7 @@ public class NetrisResource implements ServerResource {
}
private Answer executeRequest(CreateOrUpdateNetrisLoadBalancerRuleCommand cmd) {
boolean result = netrisApiClient.createLbRule(cmd);
boolean result = netrisApiClient.createOrUpdateLbRule(cmd);
if (!result) {
return new NetrisAnswer(cmd, false, String.format("Failed to create Netris LB rule for %s: %s, " +
"for private port: %s and public port: %s", getNetworkType(cmd.isVpc()), cmd.getName(), cmd.getPrivatePort(), cmd.getPublicPort(), cmd.getPublicPort()));

View File

@ -86,6 +86,6 @@ public interface NetrisApiClient {
boolean addOrUpdateStaticRoute(AddOrUpdateNetrisStaticRouteCommand cmd);
boolean deleteStaticRoute(DeleteNetrisStaticRouteCommand cmd);
boolean releaseNatIp(ReleaseNatIpCommand cmd);
boolean createLbRule(CreateOrUpdateNetrisLoadBalancerRuleCommand cmd);
boolean createOrUpdateLbRule(CreateOrUpdateNetrisLoadBalancerRuleCommand cmd);
boolean deleteLbRule(DeleteNetrisLoadBalancerRuleCommand cmd);
}

View File

@ -56,11 +56,13 @@ import io.netris.model.IpTreeAllocationTenant;
import io.netris.model.IpTreeSubnet;
import io.netris.model.IpTreeSubnetSites;
import io.netris.model.L4LBSite;
import io.netris.model.L4LbAddItem;
import io.netris.model.L4LbEditItem;
import io.netris.model.L4LbTenant;
import io.netris.model.L4LbVpc;
import io.netris.model.L4LoadBalancerBackendItem;
import io.netris.model.L4LoadBalancerItem;
import io.netris.model.L4lbAddItem;
import io.netris.model.L4lbAddOrUpdateItem;
import io.netris.model.L4lbresBody;
import io.netris.model.NatBodySiteSite;
import io.netris.model.NatBodyVpcVpc;
@ -97,6 +99,7 @@ import io.netris.model.VnetResDeleteBody;
import io.netris.model.VnetResListBody;
import io.netris.model.VnetsBody;
import io.netris.model.response.AuthResponse;
import io.netris.model.response.L4LbEditResponse;
import io.netris.model.response.TenantResponse;
import io.netris.model.response.TenantsResponse;
import org.apache.cloudstack.agent.api.CreateNetrisACLCommand;
@ -116,6 +119,7 @@ import org.apache.cloudstack.agent.api.ReleaseNatIpCommand;
import org.apache.cloudstack.agent.api.SetupNetrisPublicRangeCommand;
import org.apache.cloudstack.resource.NetrisResourceObjectUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -612,7 +616,7 @@ public class NetrisApiClientImpl implements NetrisApiClient {
}
@Override
public boolean createLbRule(CreateOrUpdateNetrisLoadBalancerRuleCommand cmd) {
public boolean createOrUpdateLbRule(CreateOrUpdateNetrisLoadBalancerRuleCommand cmd) {
boolean isVpc = cmd.isVpc();
Long networkResourceId = cmd.getId();
String networkResourceName = cmd.getName();
@ -641,16 +645,21 @@ public class NetrisApiClientImpl implements NetrisApiClient {
if (Boolean.FALSE.equals(result)) {
logger.warn("Could not find the Netris LB rule with name {}", lbName);
}
if (!matchingLbId.isEmpty()) {
logger.warn("LB rule by name: {} already exists", lbName);
return true;
}
L4lbAddItem l4lbAddItem = getL4LbRule(cmd, vpcResource, lbName, publicIp, lbBackends);
boolean updateRule = !matchingLbId.isEmpty();
L4lbAddOrUpdateItem l4lbAddItem = getL4LbRule(cmd, vpcResource, lbName, publicIp, lbBackends, updateRule);
L4LoadBalancerApi loadBalancerApi = apiClient.getApiStubForMethod(L4LoadBalancerApi.class);
ResAddEditBody response = loadBalancerApi.apiV2L4lbPost(l4lbAddItem);
if (Objects.isNull(response) || Boolean.FALSE.equals(response.isIsSuccess())) {
throw new CloudRuntimeException("Failed to create Netris LB rule");
boolean success;
L4LbEditResponse editResponse = null;
ResAddEditBody createResponse = null;
if (updateRule) {
editResponse = loadBalancerApi.apiV2L4lbIdPut((L4LbEditItem) l4lbAddItem, matchingLbId.get(0).intValue());
success = editResponse.isIsSuccess();
} else {
createResponse = loadBalancerApi.apiV2L4lbPost((L4LbAddItem) l4lbAddItem);
success = createResponse.isIsSuccess();
}
if (ObjectUtils.allNull(editResponse, createResponse) || Boolean.FALSE.equals(success)) {
throw new CloudRuntimeException(String.format("Failed to %s Netris LB rule", updateRule ? "update" : "create"));
}
} catch (ApiException e) {
logAndThrowException("Failed to create Netris load balancer rule", e);
@ -658,9 +667,9 @@ public class NetrisApiClientImpl implements NetrisApiClient {
return true;
}
private L4lbAddItem getL4LbRule(CreateOrUpdateNetrisLoadBalancerRuleCommand cmd, VPCListing vpcResource, String lbName,
String publicIp, List<NetrisLbBackend> lbBackends) {
L4lbAddItem l4lbAddItem = new L4lbAddItem();
private L4lbAddOrUpdateItem getL4LbRule(CreateOrUpdateNetrisLoadBalancerRuleCommand cmd, VPCListing vpcResource, String lbName,
String publicIp, List<NetrisLbBackend> lbBackends, boolean updateRule) {
L4lbAddOrUpdateItem l4lbAddItem = updateRule ? new L4LbEditItem() : new L4LbAddItem();
try {
l4lbAddItem.setName(lbName);
@ -685,7 +694,7 @@ public class NetrisApiClientImpl implements NetrisApiClient {
l4lbAddItem.setVpc(vpc);
l4lbAddItem.setAutomatic(false);
l4lbAddItem.setIpFamily(NetUtils.isIpv4(publicIp) ? L4lbAddItem.IpFamilyEnum.IPv4 : L4lbAddItem.IpFamilyEnum.IPv6);
l4lbAddItem.setIpFamily(NetUtils.isIpv4(publicIp) ? L4lbAddOrUpdateItem.IpFamilyEnum.IPv4 : L4lbAddOrUpdateItem.IpFamilyEnum.IPv6);
l4lbAddItem.setIp(publicIp);
l4lbAddItem.setStatus("enable");
@ -698,7 +707,7 @@ public class NetrisApiClientImpl implements NetrisApiClient {
}
l4lbAddItem.setBackend(backends);
l4lbAddItem.setPort(Integer.valueOf(cmd.getPublicPort()));
l4lbAddItem.setHealthCheck(L4lbAddItem.HealthCheckEnum.NONE);
l4lbAddItem.setHealthCheck(L4lbAddOrUpdateItem.HealthCheckEnum.NONE);
} catch (Exception e) {
throw new CloudRuntimeException("Failed to create Netris load balancer rule", e);
}

View File

@ -44,6 +44,7 @@ import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.PublicIpAddress;
import com.cloud.network.SDNProviderNetworkRule;
import com.cloud.network.SDNProviderOpObject;
import com.cloud.network.as.AutoScaleCounter;
import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.IPAddressVO;
import com.cloud.network.dao.LoadBalancerVMMapDao;
@ -91,6 +92,7 @@ import com.cloud.vm.ReservationContext;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.VMInstanceDao;
import com.google.gson.Gson;
import org.apache.cloudstack.StartupNetrisCommand;
import org.apache.cloudstack.api.ApiConstants;
import com.cloud.network.netris.NetrisNetworkRule;
@ -147,6 +149,16 @@ public class NetrisElement extends AdapterBase implements DhcpServiceProvider, D
private final Map<Network.Service, Map<Network.Capability, String>> capabilities = initCapabilities();
protected static List<AutoScaleCounter> getNetrisAutoScaleCounters() {
AutoScaleCounter counter;
final List<AutoScaleCounter> counterList = new ArrayList<>();
counter = new AutoScaleCounter(AutoScaleCounter.AutoScaleCounterType.Cpu);
counterList.add(counter);
counter = new AutoScaleCounter(AutoScaleCounter.AutoScaleCounterType.Memory);
counterList.add(counter);
return counterList;
}
private static Map<Network.Service, Map<Network.Capability, String>> initCapabilities() {
Map<Network.Service, Map<Network.Capability, String>> capabilities = new HashMap<>();
@ -166,6 +178,10 @@ public class NetrisElement extends AdapterBase implements DhcpServiceProvider, D
lbCapabilities.put(Network.Capability.SupportedProtocols, "tcp, udp");
lbCapabilities.put(Network.Capability.SupportedStickinessMethods, VirtualRouterElement.getHAProxyStickinessCapability());
lbCapabilities.put(Network.Capability.LbSchemes, String.join(",", LoadBalancerContainer.Scheme.Internal.name(), LoadBalancerContainer.Scheme.Public.name()));
final Gson gson = new Gson();
final String autoScaleCounterList = gson.toJson(getNetrisAutoScaleCounters());
lbCapabilities.put(Network.Capability.AutoScaleCounters, autoScaleCounterList);
lbCapabilities.put(Network.Capability.VmAutoScaling, "true");
capabilities.put(Network.Service.Lb, lbCapabilities);
capabilities.put(Network.Service.PortForwarding, null);
@ -750,7 +766,7 @@ public class NetrisElement extends AdapterBase implements DhcpServiceProvider, D
.lbBackends(lbBackends)
.build();
if (Arrays.asList(FirewallRule.State.Add, FirewallRule.State.Active).contains(loadBalancingRule.getState())) {
result &= netrisService.createLbRule(networkRule);
result &= netrisService.createOrUpdateLbRule(networkRule);
} else if (loadBalancingRule.getState() == FirewallRule.State.Revoke) {
result &= netrisService.deleteLbRule(networkRule);
}

View File

@ -458,7 +458,7 @@ public class NetrisServiceImpl implements NetrisService, Configurable {
}
@Override
public boolean createLbRule(NetrisNetworkRule rule) {
public boolean createOrUpdateLbRule(NetrisNetworkRule rule) {
SDNProviderNetworkRule baseRule = rule.getBaseRule();
CreateOrUpdateNetrisLoadBalancerRuleCommand cmd = new CreateOrUpdateNetrisLoadBalancerRuleCommand(baseRule.getZoneId(), baseRule.getAccountId(),
baseRule.getDomainId(), baseRule.getNetworkResourceName(), baseRule.getNetworkResourceId(), baseRule.isVpcResource(),

View File

@ -2257,8 +2257,9 @@ public class AutoScaleManagerImpl extends ManagerBase implements AutoScaleManage
Network.Provider provider = getLoadBalancerServiceProvider(asGroup.getLoadBalancerId());
if (Network.Provider.Netscaler.equals(provider)) {
checkNetScalerAsGroup(asGroup);
} else if (Network.Provider.VirtualRouter.equals(provider) || Network.Provider.VPCVirtualRouter.equals(provider)) {
checkVirtualRouterAsGroup(asGroup);
} else if (Network.Provider.VirtualRouter.equals(provider) || Network.Provider.VPCVirtualRouter.equals(provider) ||
Network.Provider.Netris.equals(provider)) {
checkAutoscalingGroup(asGroup);
}
}
}
@ -2633,7 +2634,7 @@ public class AutoScaleManagerImpl extends ManagerBase implements AutoScaleManage
countersNumberMap.put(key, countersNumberMap.get(key) + 1);
}
protected void monitorVirtualRouterAsGroup(AutoScaleVmGroupVO asGroup) {
protected void monitorAutoscalingGroup(AutoScaleVmGroupVO asGroup) {
if (!checkAsGroupMaxAndMinMembers(asGroup)) {
return;
}
@ -2663,7 +2664,7 @@ public class AutoScaleManagerImpl extends ManagerBase implements AutoScaleManage
}
}
protected void checkVirtualRouterAsGroup(AutoScaleVmGroupVO asGroup) {
protected void checkAutoscalingGroup(AutoScaleVmGroupVO asGroup) {
AutoScaleVmGroupTO groupTO = lbRulesMgr.toAutoScaleVmGroupTO(asGroup);
Map<String, Double> countersMap = new HashMap<>();
@ -3005,8 +3006,9 @@ public class AutoScaleManagerImpl extends ManagerBase implements AutoScaleManage
Network.Provider provider = getLoadBalancerServiceProvider(asGroup.getLoadBalancerId());
if (Network.Provider.Netscaler.equals(provider)) {
logger.debug("Skipping the monitoring on AutoScale VmGroup with Netscaler provider: " + asGroup);
} else if (Network.Provider.VirtualRouter.equals(provider) || Network.Provider.VPCVirtualRouter.equals(provider)) {
monitorVirtualRouterAsGroup(asGroup);
} else if (Network.Provider.VirtualRouter.equals(provider) || Network.Provider.VPCVirtualRouter.equals(provider) ||
Network.Provider.Netris.equals(provider)) {
monitorAutoscalingGroup(asGroup);
}
}
} catch (final Exception e) {

View File

@ -1005,6 +1005,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
return false;
}
if (provider.get(0) == Provider.Netscaler || provider.get(0) == Provider.F5BigIp ||
provider.get(0) == Provider.Netris ||
provider.get(0) == Provider.VirtualRouter || provider.get(0) == Provider.VPCVirtualRouter) {
return true;
}

View File

@ -1199,51 +1199,52 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio
// Offering #9 - network offering for NSX provider - NATTED mode
createAndPersistDefaultProviderOffering(NetworkOffering.DEFAULT_NAT_NSX_OFFERING, "Offering for NSX enabled networks - NAT mode",
NetworkOffering.NetworkMode.NATTED, false, true, Provider.Nsx);
NetworkOffering.NetworkMode.NATTED, false, true, false, Provider.Nsx);
// Offering #10 - network offering for NSX provider - ROUTED mode
createAndPersistDefaultProviderOffering(NetworkOffering.DEFAULT_ROUTED_NSX_OFFERING, "Offering for NSX enabled networks - ROUTED mode",
NetworkOffering.NetworkMode.ROUTED, false, true, Provider.Nsx);
NetworkOffering.NetworkMode.ROUTED, false, true, false, Provider.Nsx);
// Offering #11 - network offering for NSX provider for VPCs - NATTED mode
createAndPersistDefaultProviderOffering(NetworkOffering.DEFAULT_NAT_NSX_OFFERING_FOR_VPC, "Offering for NSX enabled networks on VPCs - NAT mode",
NetworkOffering.NetworkMode.NATTED, true, true, Provider.Nsx);
NetworkOffering.NetworkMode.NATTED, true, true, false, Provider.Nsx);
// Offering #12 - network offering for NSX provider for VPCs - ROUTED mode
createAndPersistDefaultProviderOffering(NetworkOffering.DEFAULT_ROUTED_NSX_OFFERING_FOR_VPC, "Offering for NSX enabled networks on VPCs - ROUTED mode",
NetworkOffering.NetworkMode.ROUTED, true, true, Provider.Nsx);
NetworkOffering.NetworkMode.ROUTED, true, true, false, Provider.Nsx);
// Offering #13 - network offering for NSX provider for VPCs with Internal LB - NATTED mode
createAndPersistDefaultProviderOffering(NetworkOffering.DEFAULT_NAT_NSX_OFFERING_FOR_VPC_WITH_ILB, "Offering for NSX enabled networks on VPCs with internal LB - NAT mode",
NetworkOffering.NetworkMode.NATTED, true, false, Provider.Nsx);
NetworkOffering.NetworkMode.NATTED, true, false, false, Provider.Nsx);
// Offering #14 - network offering for Netris provider for VPCs - ROUTED mode
createAndPersistDefaultProviderOffering(NetworkOffering.DEFAULT_ROUTED_NETRIS_OFFERING_FOR_VPC, "Offering for Netris enabled networks on VPCs - ROUTED mode",
NetworkOffering.NetworkMode.ROUTED, true, true, Provider.Netris);
NetworkOffering.NetworkMode.ROUTED, true, true, false, Provider.Netris);
// Offering #15 - network offering for Netris provider for VPCs - NATTED mode
createAndPersistDefaultProviderOffering(NetworkOffering.DEFAULT_NAT_NETRIS_OFFERING_FOR_VPC, "Offering for Netris enabled networks on VPCs - NAT mode",
NetworkOffering.NetworkMode.NATTED, true, true, Provider.Netris);
NetworkOffering.NetworkMode.NATTED, true, true, true, Provider.Netris);
}
});
}
private void createAndPersistDefaultProviderOffering(String name, String displayText, NetworkOffering.NetworkMode networkMode,
boolean forVpc, boolean publicLB, Provider provider) {
NetworkOfferingVO defaultNatProviderNetworkOffering =
boolean forVpc, boolean publicLB, boolean supportVmAutoscaling, Provider provider) {
NetworkOfferingVO providerNetworkOffering =
new NetworkOfferingVO(name, displayText, TrafficType.Guest, false, false, null,
null, true, Availability.Optional, null, GuestType.Isolated, false,
false, false, false, false, forVpc);
defaultNatProviderNetworkOffering.setPublicLb(publicLB);
defaultNatProviderNetworkOffering.setInternalLb(!publicLB);
defaultNatProviderNetworkOffering.setNetworkMode(networkMode);
defaultNatProviderNetworkOffering.setState(NetworkOffering.State.Enabled);
defaultNatProviderNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultNatProviderNetworkOffering);
providerNetworkOffering.setPublicLb(publicLB);
providerNetworkOffering.setInternalLb(!publicLB);
providerNetworkOffering.setNetworkMode(networkMode);
providerNetworkOffering.setState(NetworkOffering.State.Enabled);
providerNetworkOffering.setSupportsVmAutoScaling(supportVmAutoscaling);
providerNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(providerNetworkOffering);
Map<Service, Provider> serviceProviderMap = getServicesAndProvidersForProviderNetwork(networkMode, forVpc, provider);
for (Map.Entry<Network.Service, Network.Provider> service : serviceProviderMap.entrySet()) {
NetworkOfferingServiceMapVO offService =
new NetworkOfferingServiceMapVO(defaultNatProviderNetworkOffering.getId(), service.getKey(), service.getValue());
new NetworkOfferingServiceMapVO(providerNetworkOffering.getId(), service.getKey(), service.getValue());
_ntwkOfferingServiceMapDao.persist(offService);
logger.trace("Added service for the network offering: " + offService);
}

View File

@ -1572,11 +1572,11 @@ public class AutoScaleManagerImplTest {
when(asVmGroupMock.getState()).thenReturn(AutoScaleVmGroup.State.ENABLED);
when(asVmGroupMock.getLoadBalancerId()).thenReturn(loadBalancerId);
Mockito.doReturn(Network.Provider.VirtualRouter).when(autoScaleManagerImplSpy).getLoadBalancerServiceProvider(loadBalancerId);
Mockito.doNothing().when(autoScaleManagerImplSpy).checkVirtualRouterAsGroup(asVmGroupMock);
Mockito.doNothing().when(autoScaleManagerImplSpy).checkAutoscalingGroup(asVmGroupMock);
autoScaleManagerImplSpy.checkAutoScaleVmGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy).checkVirtualRouterAsGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy).checkAutoscalingGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy, never()).checkNetScalerAsGroup(asVmGroupMock);
}
@ -1585,11 +1585,11 @@ public class AutoScaleManagerImplTest {
when(asVmGroupMock.getState()).thenReturn(AutoScaleVmGroup.State.ENABLED);
when(asVmGroupMock.getLoadBalancerId()).thenReturn(loadBalancerId);
Mockito.doReturn(Network.Provider.VPCVirtualRouter).when(autoScaleManagerImplSpy).getLoadBalancerServiceProvider(loadBalancerId);
Mockito.doNothing().when(autoScaleManagerImplSpy).checkVirtualRouterAsGroup(asVmGroupMock);
Mockito.doNothing().when(autoScaleManagerImplSpy).checkAutoscalingGroup(asVmGroupMock);
autoScaleManagerImplSpy.checkAutoScaleVmGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy).checkVirtualRouterAsGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy).checkAutoscalingGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy, never()).checkNetScalerAsGroup(asVmGroupMock);
}
@ -1602,7 +1602,7 @@ public class AutoScaleManagerImplTest {
autoScaleManagerImplSpy.checkAutoScaleVmGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy, never()).checkVirtualRouterAsGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy, never()).checkAutoscalingGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy).checkNetScalerAsGroup(asVmGroupMock);
}
@ -1984,7 +1984,7 @@ public class AutoScaleManagerImplTest {
Mockito.doNothing().when(autoScaleManagerImplSpy).doScaleUp(vmGroupId, 1);
Mockito.doNothing().when(autoScaleManagerImplSpy).cleanupAsVmGroupStatistics(groupTO);
autoScaleManagerImplSpy.checkVirtualRouterAsGroup(asVmGroupMock);
autoScaleManagerImplSpy.checkAutoscalingGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy).doScaleUp(vmGroupId, 1);
}
@ -2000,7 +2000,7 @@ public class AutoScaleManagerImplTest {
Mockito.doNothing().when(autoScaleManagerImplSpy).doScaleDown(vmGroupId);
Mockito.doNothing().when(autoScaleManagerImplSpy).cleanupAsVmGroupStatistics(groupTO);
autoScaleManagerImplSpy.checkVirtualRouterAsGroup(asVmGroupMock);
autoScaleManagerImplSpy.checkAutoscalingGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy).doScaleDown(vmGroupId);
}
@ -2211,7 +2211,7 @@ public class AutoScaleManagerImplTest {
Mockito.doNothing().when(autoScaleManagerImplSpy).getVmStatsFromHosts(groupTO);
Mockito.doNothing().when(autoScaleManagerImplSpy).getNetworkStatsFromVirtualRouter(groupTO);
autoScaleManagerImplSpy.monitorVirtualRouterAsGroup(asVmGroupMock);
autoScaleManagerImplSpy.monitorAutoscalingGroup(asVmGroupMock);
Mockito.verify(autoScaleManagerImplSpy).getVmStatsFromHosts(groupTO);
Mockito.verify(autoScaleManagerImplSpy).getNetworkStatsFromVirtualRouter(groupTO);

View File

@ -107,7 +107,7 @@ public class NetrisServiceMockTest implements NetrisService {
}
@Override
public boolean createLbRule(NetrisNetworkRule rule) {
public boolean createOrUpdateLbRule(NetrisNetworkRule rule) {
return true;
}