diff --git a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java index 5fc41e34c34..59d5c8dec05 100644 --- a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java +++ b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java @@ -103,9 +103,10 @@ public interface LoadBalancingRulesService { * balancer. * * @param cmd - * @return list of vm instances that have been or can be applied to a load balancer + * @return list of vm instances that have been or can be applied to a load balancer along with service state, + * if the LB has health check policy created on it from cloudstack. */ - List listLoadBalancerInstances(ListLoadBalancerRuleInstancesCmd cmd); + Pair, List> listLoadBalancerInstances(ListLoadBalancerRuleInstancesCmd cmd); /** * List load balancer rules based on the given criteria diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index 121403fa064..00d526d216e 100755 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -517,7 +517,7 @@ public class ApiConstants { public static final String IS_DYNAMICALLY_SCALABLE = "isdynamicallyscalable"; public static final String ROUTING = "isrouting"; public static final String MAX_CONNECTIONS = "maxconnections"; - + public static final String SERVICE_STATE = "servicestate"; public enum HostDetails { all, capacity, events, stats, min; } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java index 49ab42c32df..fcd41c4963f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java @@ -17,6 +17,7 @@ package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import org.apache.cloudstack.api.APICommand; @@ -29,6 +30,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import com.cloud.uservm.UserVm; +import com.cloud.utils.Pair; @APICommand(name = "listLoadBalancerRuleInstances", description="List all virtual machine instances that are assigned to a load balancer rule.", responseObject=UserVmResponse.class) public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { @@ -70,12 +72,18 @@ public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { @Override public void execute(){ - List result = _lbService.listLoadBalancerInstances(this); + Pair, List> vmServiceMap = _lbService.listLoadBalancerInstances(this); + List result = vmServiceMap.first(); + List serviceStates = vmServiceMap.second(); ListResponse response = new ListResponse(); List vmResponses = new ArrayList(); if (result != null) { vmResponses = _responseGenerator.createUserVmResponse("loadbalancerruleinstance", result.toArray(new UserVm[result.size()])); } + + for (int i=0;i(); @@ -439,4 +441,8 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp this.isDynamicallyScalable = isDynamicallyScalable; } + public void setServiceState(String state) { + this.serviceState = state; + } + } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 92f9417e386..3f7b70ffffc 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -1835,7 +1835,7 @@ public class LoadBalancingRulesManagerImpl extends ManagerBase implements } @Override - public List listLoadBalancerInstances(ListLoadBalancerRuleInstancesCmd cmd) + public Pair, List> listLoadBalancerInstances(ListLoadBalancerRuleInstancesCmd cmd) throws PermissionDeniedException { Account caller = CallContext.current().getCallingAccount(); Long loadBalancerId = cmd.getId(); @@ -1853,14 +1853,16 @@ public class LoadBalancingRulesManagerImpl extends ManagerBase implements _accountMgr.checkAccess(caller, null, true, loadBalancer); List loadBalancerInstances = new ArrayList(); + List serviceStates = new ArrayList(); List vmLoadBalancerMappings = null; - vmLoadBalancerMappings = _lb2VmMapDao.listByLoadBalancerId(loadBalancerId); - + Map vmServiceState = new HashMap(vmLoadBalancerMappings.size()); List appliedInstanceIdList = new ArrayList(); + if ((vmLoadBalancerMappings != null) && !vmLoadBalancerMappings.isEmpty()) { for (LoadBalancerVMMapVO vmLoadBalancerMapping : vmLoadBalancerMappings) { appliedInstanceIdList.add(vmLoadBalancerMapping.getInstanceId()); + vmServiceState.put(vmLoadBalancerMapping.getInstanceId(), vmLoadBalancerMapping.getState()); } } @@ -1881,10 +1883,10 @@ public class LoadBalancingRulesManagerImpl extends ManagerBase implements boolean isApplied = appliedInstanceIdList.contains(userVm.getId()); if ((isApplied && applied) || (!isApplied && !applied)) { loadBalancerInstances.add(userVm); + serviceStates.add(vmServiceState.get(userVm.getId())); } } - - return loadBalancerInstances; + return new Pair, List>(loadBalancerInstances,serviceStates); } @Override