diff --git a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java index 3e1101453c2..50b39d2f338 100644 --- a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java +++ b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java @@ -161,4 +161,6 @@ public interface LoadBalancingRulesService { HealthCheckPolicy updateLBHealthCheckPolicy(long id, String customId, Boolean forDisplay); LoadBalancer findLbByStickinessId(long stickinessPolicyId); + + Long findLBIdByHealtCheckPolicyId(long lbHealthCheckPolicy); } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java index 7f78da64097..3f2082af5ca 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBHealthCheckPoliciesCmd.java @@ -29,6 +29,8 @@ import org.apache.cloudstack.api.response.LBHealthCheckResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.log4j.Logger; + +import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.rules.HealthCheckPolicy; import com.cloud.network.rules.LoadBalancer; @@ -45,13 +47,15 @@ public class ListLBHealthCheckPoliciesCmd extends BaseListCmd { @Parameter(name = ApiConstants.LBID, type = CommandType.UUID, entityType = FirewallRuleResponse.class, - required = true, description = "the ID of the load balancer rule") private Long lbRuleId; @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "list resources by display flag; only ROOT admin is eligible to pass this parameter", since = "4.4", authorized = {RoleType.Admin}) private Boolean display; + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = LBHealthCheckResponse.class, description = "the ID of the healthcheck policy", since = "4.4") + private Long id; + // /////////////////////////////////////////////////// // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// @@ -59,6 +63,10 @@ public class ListLBHealthCheckPoliciesCmd extends BaseListCmd { return lbRuleId; } + public Long getId() { + return id; + } + public boolean getDisplay() { if (display != null) { return display; @@ -78,9 +86,18 @@ public class ListLBHealthCheckPoliciesCmd extends BaseListCmd { @Override public void execute() { List hcpResponses = new ArrayList(); - LoadBalancer lb = _lbService.findById(getLbRuleId()); ListResponse response = new ListResponse(); + Long lbRuleId = getLbRuleId(); + Long hId = getId(); + if(lbRuleId == null) { + if(hId != null) { + lbRuleId = _lbService.findLBIdByHealtCheckPolicyId(hId); + } else { + throw new InvalidParameterValueException("Either LB Ruleid or HealthCheckpolicy Id should be specified"); + } + } + LoadBalancer lb = _lbService.findById(lbRuleId); if (lb != null) { List healthCheckPolicies = _lbService.searchForLBHealthCheckPolicies(this); LBHealthCheckResponse spResponse = _responseGenerator.createLBHealthCheckPolicyResponse(healthCheckPolicies, lb); diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index fbb862e6938..d7a85b6ff4f 100644 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -2263,15 +2263,18 @@ public class LoadBalancingRulesManagerImpl extends ManagerBase implements public List searchForLBHealthCheckPolicies(ListLBHealthCheckPoliciesCmd cmd) throws PermissionDeniedException { Account caller = CallContext.current().getCallingAccount(); Long loadBalancerId = cmd.getLbRuleId(); + Long policyId = cmd.getId(); boolean forDisplay = cmd.getDisplay(); - + if(loadBalancerId == null) { + loadBalancerId = findLBIdByHealtCheckPolicyId(policyId); + } LoadBalancerVO loadBalancer = _lbDao.findById(loadBalancerId); if (loadBalancer == null) { return null; } _accountMgr.checkAccess(caller, null, true, loadBalancer); - List hcDbpolicies = _lb2healthcheckDao.listByLoadBalancerIdAndDisplayFlag(cmd.getLbRuleId(), forDisplay); + List hcDbpolicies = _lb2healthcheckDao.listByLoadBalancerIdAndDisplayFlag(loadBalancerId, forDisplay); return hcDbpolicies; } @@ -2569,4 +2572,13 @@ public class LoadBalancingRulesManagerImpl extends ManagerBase implements return _lb2healthcheckDao.findById(id); } + @Override + public Long findLBIdByHealtCheckPolicyId(long lbHealthCheckPolicy) { + LBHealthCheckPolicyVO policy= _lb2healthcheckDao.findById(lbHealthCheckPolicy); + if(policy != null) { + return policy.getLoadBalancerId(); + } + return null; + } + }