mirror of https://github.com/apache/cloudstack.git
80 lines
3.8 KiB
Java
80 lines
3.8 KiB
Java
package com.cloud.async.executor;
|
|
|
|
import org.apache.log4j.Logger;
|
|
|
|
import com.cloud.api.BaseCmd;
|
|
import com.cloud.async.AsyncJobManager;
|
|
import com.cloud.async.AsyncJobResult;
|
|
import com.cloud.async.AsyncJobVO;
|
|
import com.cloud.async.BaseAsyncJobExecutor;
|
|
import com.cloud.exception.InvalidParameterValueException;
|
|
import com.cloud.network.LoadBalancerVO;
|
|
import com.cloud.serializer.GsonHelper;
|
|
import com.cloud.server.ManagementServer;
|
|
import com.cloud.user.Account;
|
|
import com.google.gson.Gson;
|
|
|
|
public class UpdateLoadBalancerRuleExecutor extends BaseAsyncJobExecutor {
|
|
public static final Logger s_logger = Logger.getLogger(UpdateLoadBalancerRuleExecutor.class.getName());
|
|
|
|
@Override
|
|
public boolean execute() {
|
|
/*
|
|
if (getSyncSource() == null) {
|
|
Gson gson = GsonHelper.getBuilder().create();
|
|
AsyncJobManager asyncMgr = getAsyncJobMgr();
|
|
AsyncJobVO job = getJob();
|
|
|
|
UpdateLoadBalancerParam param = gson.fromJson(job.getCmdInfo(), UpdateLoadBalancerParam.class);
|
|
asyncMgr.syncAsyncJobExecution(job.getId(), "LoadBalancer", param.getLoadBalancerId()); // in reality I need to synchronize on both the load balancer and domR
|
|
|
|
// always true if it does not have sync-source
|
|
return true;
|
|
} else {
|
|
Gson gson = GsonHelper.getBuilder().create();
|
|
AsyncJobManager asyncMgr = getAsyncJobMgr();
|
|
AsyncJobVO job = getJob();
|
|
|
|
UpdateLoadBalancerParam param = gson.fromJson(job.getCmdInfo(), UpdateLoadBalancerParam.class);
|
|
ManagementServer ms = asyncMgr.getExecutorContext().getManagementServer();
|
|
LoadBalancerVO loadBalancer = ms.findLoadBalancerById(param.getLoadBalancerId());
|
|
|
|
try {
|
|
loadBalancer = ms.updateLoadBalancerRule(loadBalancer, param.getName(), param.getDescription());
|
|
loadBalancer = ms.updateLoadBalancerRule(param.getUserId(), loadBalancer, param.getPrivatePort(), param.getAlgorithm());
|
|
|
|
getAsyncJobMgr().completeAsyncJob(job.getId(), AsyncJobResult.STATUS_SUCCEEDED, 0, composeResultObject(ms, loadBalancer));
|
|
} catch (InvalidParameterValueException ex) {
|
|
getAsyncJobMgr().completeAsyncJob(job.getId(), AsyncJobResult.STATUS_FAILED, BaseCmd.PARAM_ERROR, ex.getMessage());
|
|
} catch (Exception ex) {
|
|
s_logger.error("Unhandled exception updating load balancer rule", ex);
|
|
getAsyncJobMgr().completeAsyncJob(job.getId(), AsyncJobResult.STATUS_FAILED, BaseCmd.INTERNAL_ERROR, "Internal error updating load balancer rule " + loadBalancer.getName());
|
|
}
|
|
return true;
|
|
}
|
|
*/
|
|
return true;
|
|
}
|
|
|
|
private UpdateLoadBalancerRuleResultObject composeResultObject(ManagementServer ms, LoadBalancerVO loadBalancer) {
|
|
UpdateLoadBalancerRuleResultObject resultObject = new UpdateLoadBalancerRuleResultObject();
|
|
|
|
resultObject.setId(loadBalancer.getId());
|
|
resultObject.setName(loadBalancer.getName());
|
|
resultObject.setDescription(loadBalancer.getDescription());
|
|
resultObject.setPublicIp(loadBalancer.getIpAddress());
|
|
resultObject.setPublicPort(loadBalancer.getPublicPort());
|
|
resultObject.setPrivatePort(loadBalancer.getPrivatePort());
|
|
resultObject.setAlgorithm(loadBalancer.getAlgorithm());
|
|
|
|
Account accountTemp = ms.findAccountById(loadBalancer.getAccountId());
|
|
if (accountTemp != null) {
|
|
resultObject.setAccountName(accountTemp.getAccountName());
|
|
resultObject.setDomainId(accountTemp.getDomainId());
|
|
// resultObject.setDomainName(ms.findDomainIdById(accountTemp.getDomainId()).getName());
|
|
}
|
|
|
|
return resultObject;
|
|
}
|
|
}
|