mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
bug 11246: return lb rule Id in the async response for createLoadBalancer api
status 11246: resolved fixed
This commit is contained in:
parent
c4c0e69425
commit
b05c69f3b3
@ -151,7 +151,7 @@ public interface ResponseGenerator {
|
||||
|
||||
ClusterResponse createClusterResponse(Cluster cluster);
|
||||
|
||||
FirewallRuleResponse createFirewallRuleResponse(PortForwardingRule fwRule);
|
||||
FirewallRuleResponse createPortForwardingRuleResponse(PortForwardingRule fwRule);
|
||||
|
||||
IpForwardingRuleResponse createIpForwardingRuleResponse(StaticNatRule fwRule);
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ import java.util.List;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiConstants;
|
||||
import com.cloud.api.BaseAsyncCmd;
|
||||
import com.cloud.api.BaseAsyncCreateCmd;
|
||||
import com.cloud.api.BaseCmd;
|
||||
import com.cloud.api.Implementation;
|
||||
import com.cloud.api.Parameter;
|
||||
@ -37,13 +37,14 @@ import com.cloud.exception.NetworkRuleConflictException;
|
||||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.IpAddress;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
import com.cloud.network.rules.LoadBalancer;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.UserContext;
|
||||
import com.cloud.utils.net.NetUtils;
|
||||
|
||||
@Implementation(description="Creates a load balancer rule", responseObject=LoadBalancerResponse.class)
|
||||
public class CreateLoadBalancerRuleCmd extends BaseAsyncCmd /*implements LoadBalancer */{
|
||||
public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements LoadBalancer */{
|
||||
public static final Logger s_logger = Logger.getLogger(CreateLoadBalancerRuleCmd.class.getName());
|
||||
|
||||
private static final String s_name = "createloadbalancerruleresponse";
|
||||
@ -149,16 +150,48 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCmd /*implements LoadBa
|
||||
@Override
|
||||
public void execute() throws ResourceAllocationException, ResourceUnavailableException {
|
||||
|
||||
UserContext callerContext = UserContext.current();
|
||||
boolean success = true;
|
||||
LoadBalancer rule = null;
|
||||
try {
|
||||
UserContext.current().setEventDetails("Rule Id: " + getEntityId());
|
||||
|
||||
if (getOpenFirewall()) {
|
||||
success = success && _firewallService.applyFirewallRules(publicIpId, callerContext.getCaller());
|
||||
}
|
||||
|
||||
// State might be different after the rule is applied, so get new object here
|
||||
rule = _entityMgr.findById(LoadBalancer.class, getEntityId());
|
||||
LoadBalancerResponse lbResponse = new LoadBalancerResponse();
|
||||
if (rule != null) {
|
||||
lbResponse = _responseGenerator.createLoadBalancerResponse(rule);
|
||||
setResponseObject(lbResponse);
|
||||
}
|
||||
lbResponse.setResponseName(getCommandName());
|
||||
} finally {
|
||||
if (!success || rule == null) {
|
||||
// no need to apply the rule on the backend as it exists in the db only
|
||||
_lbService.deleteLoadBalancerRule(getEntityId(), false);
|
||||
|
||||
if (getOpenFirewall()) {
|
||||
_firewallService.revokeRelatedFirewallRule(getEntityId(), true);
|
||||
}
|
||||
|
||||
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create load balancer rule");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void create() {
|
||||
//cidr list parameter is deprecated
|
||||
if (cidrlist != null) {
|
||||
throw new InvalidParameterValueException("Parameter cidrList is deprecated; if you need to open firewall rule for the specific cidr, please refer to createFirewallRule command");
|
||||
}
|
||||
|
||||
try {
|
||||
LoadBalancer result = _lbService.createLoadBalancerRule(this, getOpenFirewall());
|
||||
LoadBalancerResponse response = _responseGenerator.createLoadBalancerResponse(result);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
this.setEntityId(result.getId());
|
||||
} catch (NetworkRuleConflictException e) {
|
||||
s_logger.warn("Exception: ", e);
|
||||
throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage());
|
||||
|
||||
@ -139,7 +139,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P
|
||||
rule = _entityMgr.findById(PortForwardingRule.class, getEntityId());
|
||||
FirewallRuleResponse fwResponse = new FirewallRuleResponse();
|
||||
if (rule != null) {
|
||||
fwResponse = _responseGenerator.createFirewallRuleResponse(rule);
|
||||
fwResponse = _responseGenerator.createPortForwardingRuleResponse(rule);
|
||||
setResponseObject(fwResponse);
|
||||
}
|
||||
fwResponse.setResponseName(getCommandName());
|
||||
|
||||
@ -87,7 +87,7 @@ public class ListPortForwardingRulesCmd extends BaseListCmd {
|
||||
List<FirewallRuleResponse> fwResponses = new ArrayList<FirewallRuleResponse>();
|
||||
|
||||
for (PortForwardingRule fwRule : result) {
|
||||
FirewallRuleResponse ruleData = _responseGenerator.createFirewallRuleResponse(fwRule);
|
||||
FirewallRuleResponse ruleData = _responseGenerator.createPortForwardingRuleResponse(fwRule);
|
||||
ruleData.setObjectName("portforwardingrule");
|
||||
fwResponses.add(ruleData);
|
||||
}
|
||||
|
||||
@ -981,7 +981,7 @@ public class ApiResponseHelper implements ResponseGenerator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public FirewallRuleResponse createFirewallRuleResponse(PortForwardingRule fwRule) {
|
||||
public FirewallRuleResponse createPortForwardingRuleResponse(PortForwardingRule fwRule) {
|
||||
FirewallRuleResponse response = new FirewallRuleResponse();
|
||||
response.setId(fwRule.getId());
|
||||
response.setPrivateStartPort(Integer.toString(fwRule.getDestinationPortStart()));
|
||||
|
||||
@ -439,11 +439,6 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager,
|
||||
_usageEventDao.persist(usageEvent);
|
||||
txn.commit();
|
||||
|
||||
// send firewallRule to the backend
|
||||
if (openFirewall) {
|
||||
success = success && _firewallMgr.applyFirewallRules(lb.getSourceIpAddressId(), caller.getCaller());
|
||||
}
|
||||
|
||||
return newRule;
|
||||
} catch (Exception e) {
|
||||
success = false;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user