mirror of https://github.com/apache/cloudstack.git
Work in progress for modifying createPortForwardingRule command.
- some of the logic has been moved to manager - some annotations have been added for the command itself
This commit is contained in:
parent
154c6985a4
commit
a6c34d422c
|
|
@ -25,8 +25,10 @@ import java.util.Map;
|
|||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.BaseCmd;
|
||||
import com.cloud.api.Implementation;
|
||||
import com.cloud.api.Parameter;
|
||||
import com.cloud.api.ServerApiException;
|
||||
import com.cloud.api.BaseCmd.Manager;
|
||||
import com.cloud.exception.NetworkRuleConflictException;
|
||||
import com.cloud.network.FirewallRuleVO;
|
||||
import com.cloud.network.IPAddressVO;
|
||||
|
|
@ -35,6 +37,7 @@ import com.cloud.user.User;
|
|||
import com.cloud.utils.Pair;
|
||||
import com.cloud.vm.UserVmVO;
|
||||
|
||||
@Implementation(method="createPortForwardingRule", manager=Manager.NetworkManager)
|
||||
public class CreateIPForwardingRuleCmd extends BaseCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(CreateIPForwardingRuleCmd.class.getName());
|
||||
|
||||
|
|
@ -104,10 +107,10 @@ public class CreateIPForwardingRuleCmd extends BaseCmd {
|
|||
public String getName() {
|
||||
return s_name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Pair<Enum, Boolean>> getProperties() {
|
||||
return s_properties;
|
||||
}
|
||||
public String getResponse() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Pair<String, Object>> execute(Map<String, Object> params) {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import com.cloud.api.commands.AssignToLoadBalancerRuleCmd;
|
||||
import com.cloud.api.commands.CreateIPForwardingRuleCmd;
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
import com.cloud.dc.HostPodVO;
|
||||
import com.cloud.dc.VlanVO;
|
||||
|
|
@ -162,7 +163,14 @@ public interface NetworkManager extends Manager {
|
|||
* @return list of rules successfully updated
|
||||
*/
|
||||
public List<FirewallRuleVO> updateFirewallRules(String publicIpAddress, List<FirewallRuleVO> fwRules, DomainRouterVO router);
|
||||
|
||||
|
||||
/**
|
||||
* Create a port forwarding rule from the giving ipAddress/port to the given virtual machine/port.
|
||||
* @param cmd the command specifying the ip address, public port, protocol, private port, and virtual machine id.
|
||||
* @return the newly created FirewallRuleVO if successful, null otherwise.
|
||||
*/
|
||||
public FirewallRuleVO createPortForwardingRule(CreateIPForwardingRuleCmd cmd) throws InvalidParameterValueException;
|
||||
|
||||
/**
|
||||
* Associates or disassociates a list of public IP address for a router.
|
||||
* @param router router object to send the association to
|
||||
|
|
|
|||
|
|
@ -55,7 +55,10 @@ import com.cloud.agent.api.routing.SavePasswordCommand;
|
|||
import com.cloud.agent.api.routing.SetFirewallRuleCommand;
|
||||
import com.cloud.agent.api.routing.VmDataCommand;
|
||||
import com.cloud.alert.AlertManager;
|
||||
import com.cloud.api.BaseCmd;
|
||||
import com.cloud.api.ServerApiException;
|
||||
import com.cloud.api.commands.AssignToLoadBalancerRuleCmd;
|
||||
import com.cloud.api.commands.CreateIPForwardingRuleCmd;
|
||||
import com.cloud.async.AsyncJobExecutor;
|
||||
import com.cloud.async.AsyncJobManager;
|
||||
import com.cloud.async.AsyncJobVO;
|
||||
|
|
@ -1534,6 +1537,33 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FirewallRuleVO createPortForwardingRule(CreateIPForwardingRuleCmd cmd) throws InvalidParameterValueException {
|
||||
// validate IP Address exists
|
||||
IPAddressVO ipAddress = _ipAddressDao.findById(cmd.getIpAddress());
|
||||
if (ipAddress == null) {
|
||||
throw new InvalidParameterValueException("Unable to create port forwarding rule on address " + ipAddress + ", invalid IP address specified.");
|
||||
}
|
||||
|
||||
// validate user VM exists
|
||||
UserVmVO userVM = _vmDao.findById(cmd.getVirtualMachineId());
|
||||
if (userVM == null) {
|
||||
throw new InvalidParameterValueException("Unable to create port forwarding rule on address " + ipAddress + ", invalid virtual machine id specified (" + cmd.getVirtualMachineId() + ").");
|
||||
}
|
||||
|
||||
// validate that IP address and userVM belong to the same account
|
||||
if ((ipAddress.getAccountId() == null) || (ipAddress.getAccountId().longValue() != userVM.getAccountId())) {
|
||||
throw new InvalidParameterValueException("Unable to create port forwarding rule, IP address " + ipAddress + " owner is not the same as owner of virtual machine " + userVM.toString());
|
||||
}
|
||||
|
||||
// validate that userVM is in the same availability zone as the IP address
|
||||
if (ipAddress.getDataCenterId() != userVM.getDataCenterId()) {
|
||||
throw new InvalidParameterValueException("Unable to create port forwarding rule, IP address " + ipAddress + " is not in the same availability zone as virtual machine " + userVM.toString());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void assignToLoadBalancer(AssignToLoadBalancerRuleCmd cmd) throws NetworkRuleConflictException, InternalErrorException,
|
||||
PermissionDeniedException, InvalidParameterValueException {
|
||||
|
|
|
|||
Loading…
Reference in New Issue