CLOUDSTACK-1958: List GSLB response should have the GSLB site (zone load

balancer rule) details as well
This commit is contained in:
Murali Reddy 2013-04-24 21:02:42 +05:30
parent ff7112a074
commit f65f3b9d50
6 changed files with 45 additions and 0 deletions

View File

@ -17,6 +17,7 @@
package com.cloud.region.ha;
import com.cloud.network.rules.LoadBalancer;
import org.apache.cloudstack.api.command.user.region.ha.gslb.*;
import java.util.List;
@ -44,4 +45,6 @@ public interface GlobalLoadBalancingRulesService {
List<GlobalLoadBalancerRule> listGlobalLoadBalancerRule(ListGlobalLoadBalancerRuleCmd listGslbCmd);
List<LoadBalancer> listSiteLoadBalancers(long gslbRuleId);
}

View File

@ -335,6 +335,7 @@ public class ApiConstants {
public static final String LOAD_BALANCER_DEVICE_STATE = "lbdevicestate";
public static final String LOAD_BALANCER_DEVICE_CAPACITY = "lbdevicecapacity";
public static final String LOAD_BALANCER_DEVICE_DEDICATED = "lbdevicededicated";
public static final String LOAD_BALANCER_RULE = "loadbalancerrule";
public static final String LOAD_BALANCER_RULE_LIST = "loadbalancerrulelist";
public static final String FIREWALL_DEVICE_ID = "fwdeviceid";
public static final String FIREWALL_DEVICE_NAME = "fwdevicename";

View File

@ -23,6 +23,8 @@ import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseResponse;
import org.apache.cloudstack.api.EntityReference;
import java.util.List;
@EntityReference(value= GlobalLoadBalancerRule.class)
public class GlobalLoadBalancerResponse extends BaseResponse implements ControlledEntityResponse {
@ -76,6 +78,10 @@ public class GlobalLoadBalancerResponse extends BaseResponse implements Controll
@Param(description = "the domain of the load balancer rule")
private String domainName;
@SerializedName(ApiConstants.LOAD_BALANCER_RULE)
@Param(description="List of load balancer rules that are part of GSLB rule", responseObject = LoadBalancerResponse.class)
private List<LoadBalancerResponse> siteLoadBalancers;
public void setRegionIdId(Integer regionId) {
this.regionId = regionId;
}
@ -130,4 +136,8 @@ public class GlobalLoadBalancerResponse extends BaseResponse implements Controll
public void setDomainName(String domainName) {
this.domainName = domainName;
}
public void setSiteLoadBalancers(List<LoadBalancerResponse> siteLoadBalancers) {
this.siteLoadBalancers = siteLoadBalancers;
}
}

View File

@ -25,6 +25,8 @@ import java.util.Set;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import com.cloud.network.rules.LoadBalancer;
import com.cloud.region.ha.GlobalLoadBalancingRulesService;
import org.apache.cloudstack.affinity.AffinityGroup;
import org.apache.cloudstack.affinity.AffinityGroupResponse;
import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
@ -388,6 +390,7 @@ public class ApiDBUtils {
static VpcProvisioningService _vpcProvSvc;
static AffinityGroupDao _affinityGroupDao;
static AffinityGroupJoinDao _affinityGroupJoinDao;
static GlobalLoadBalancingRulesService _gslbService;
@Inject private ManagementServer ms;
@Inject public AsyncJobManager asyncMgr;
@ -494,6 +497,7 @@ public class ApiDBUtils {
@Inject private VpcProvisioningService vpcProvSvc;
@Inject private AffinityGroupDao affinityGroupDao;
@Inject private AffinityGroupJoinDao affinityGroupJoinDao;
@Inject private GlobalLoadBalancingRulesService gslbService;
@PostConstruct
void init() {
@ -599,6 +603,7 @@ public class ApiDBUtils {
_vpcProvSvc = vpcProvSvc;
_affinityGroupDao = affinityGroupDao;
_affinityGroupJoinDao = affinityGroupJoinDao;
_gslbService = gslbService;
// Note: stats collector should already have been initialized by this time, otherwise a null instance is returned
_statsCollector = StatsCollector.getInstance();
}
@ -1630,4 +1635,8 @@ public class ApiDBUtils {
public static AffinityGroupResponse fillAffinityGroupDetails(AffinityGroupResponse resp, AffinityGroupJoinVO group) {
return _affinityGroupJoinDao.setAffinityGroupResponse(resp, group);
}
public static List<? extends LoadBalancer> listSiteLoadBalancers(long gslbRuleId) {
return _gslbService.listSiteLoadBalancers(gslbRuleId);
}
}

View File

@ -798,6 +798,14 @@ public class ApiResponseHelper implements ResponseGenerator {
response.setId(globalLoadBalancerRule.getUuid());
populateOwner(response, globalLoadBalancerRule);
response.setObjectName("globalloadbalancer");
List<LoadBalancerResponse> siteLbResponses = new ArrayList<LoadBalancerResponse>();
List<? extends LoadBalancer> siteLoadBalaners = ApiDBUtils.listSiteLoadBalancers(globalLoadBalancerRule.getId());
for (LoadBalancer siteLb : siteLoadBalaners) {
LoadBalancerResponse siteLbResponse = createLoadBalancerResponse(siteLb);
siteLbResponses.add(siteLbResponse);
}
response.setSiteLoadBalancers(siteLbResponses);
return response;
}

View File

@ -511,6 +511,20 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
return null;
}
@Override
public List<LoadBalancer> listSiteLoadBalancers(long gslbRuleId) {
List<GlobalLoadBalancerLbRuleMapVO> gslbLbMapVos = _gslbLbMapDao.listByGslbRuleId(gslbRuleId);
List<LoadBalancer> siteLoadBalancers = new ArrayList<LoadBalancer>();
if (gslbLbMapVos != null) {
for (GlobalLoadBalancerLbRuleMapVO gslbLbMapVo : gslbLbMapVos) {
LoadBalancerVO loadBalancer = _lbDao.findById(gslbLbMapVo.getLoadBalancerId());
siteLoadBalancers.add(loadBalancer);
}
return siteLoadBalancers;
}
return null;
}
private boolean applyGlobalLoadBalancerRuleConfig(long gslbRuleId, boolean revoke) throws ResourceUnavailableException {
GlobalLoadBalancerRuleVO gslbRule = _gslbRuleDao.findById(gslbRuleId);