Set domR access details (name, privateIp) for various commands - PF/LB/IPAssoc

This commit is contained in:
alena 2010-12-20 17:04:56 -08:00
parent 769b89b530
commit b228ae6acb
5 changed files with 28 additions and 27 deletions

View File

@ -25,37 +25,21 @@ import com.cloud.agent.api.to.IpAddressTO;
*
*/
public class IPAssocCommand extends RoutingCommand {
private String routerName;
private String routerIp;
IpAddressTO[] ipAddresses;
protected IPAssocCommand() {
}
public IPAssocCommand(String routerName, String privateIpAddress, IpAddressTO[] ips) {
this.setRouterName(routerName);
this.routerIp = privateIpAddress;
public IPAssocCommand(IpAddressTO[] ips) {
this.ipAddresses = ips;
}
public String getRouterIp() {
return routerIp;
}
@Override
public boolean executeInSequence() {
return false;
}
public void setRouterName(String routerName) {
this.routerName = routerName;
}
public String getRouterName() {
return routerName;
}
public IpAddressTO[] getIpAddresses() {
return ipAddresses;
}

View File

@ -24,6 +24,9 @@ import com.cloud.agent.api.Command;
public abstract class RoutingCommand extends Command {
HashMap<String, String> accessDetails = new HashMap<String, String>(0);
public static final String ROUTER_NAME = "router.name";
public static final String ROUTER_IP = "router.ip";
protected RoutingCommand() {
super();
}

View File

@ -48,6 +48,7 @@ import com.cloud.agent.api.routing.DhcpEntryCommand;
import com.cloud.agent.api.routing.IPAssocCommand;
import com.cloud.agent.api.routing.IpAssocAnswer;
import com.cloud.agent.api.routing.LoadBalancerCfgCommand;
import com.cloud.agent.api.routing.RoutingCommand;
import com.cloud.agent.api.routing.SavePasswordCommand;
import com.cloud.agent.api.routing.VmDataCommand;
import com.cloud.agent.api.to.IpAddressTO;
@ -209,8 +210,10 @@ public class VirtualRoutingResource implements Manager {
String[] results = new String[cmd.getIpAddresses().length];
int i = 0;
String result = null;
String routerName = cmd.getAccessDetail(RoutingCommand.ROUTER_NAME);
String routerIp = cmd.getAccessDetail(RoutingCommand.ROUTER_IP);
for (IpAddressTO ip : ips) {
result = assignPublicIpAddress(cmd.getRouterName(), cmd.getRouterIp(), ip.getPublicIp(), ip.isAdd(), ip.isSourceNat(), ip.getVlanId(), ip.getVlanGateway(), ip.getVlanNetmask());
result = assignPublicIpAddress(routerName, routerIp, ip.getPublicIp(), ip.isAdd(), ip.isSourceNat(), ip.getVlanId(), ip.getVlanGateway(), ip.getVlanNetmask());
if (result != null) {
results[i++] = IpAssocAnswer.errorResult;
} else {

View File

@ -126,6 +126,7 @@ import com.cloud.agent.api.routing.IPAssocCommand;
import com.cloud.agent.api.routing.IpAssocAnswer;
import com.cloud.agent.api.routing.LoadBalancerCfgCommand;
import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand;
import com.cloud.agent.api.routing.RoutingCommand;
import com.cloud.agent.api.routing.SavePasswordCommand;
import com.cloud.agent.api.routing.SetPortForwardingRulesAnswer;
import com.cloud.agent.api.routing.SetPortForwardingRulesCommand;
@ -171,7 +172,6 @@ import com.cloud.utils.Ternary;
import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
import com.cloud.utils.script.Script;
import com.cloud.vm.DiskProfile;
import com.cloud.vm.State;
import com.cloud.vm.VirtualMachine;
@ -191,9 +191,9 @@ import com.xensource.xenapi.SR;
import com.xensource.xenapi.Session;
import com.xensource.xenapi.Types;
import com.xensource.xenapi.Types.BadServerResponse;
import com.xensource.xenapi.Types.IpConfigurationMode;
import com.xensource.xenapi.Types.VmPowerState;
import com.xensource.xenapi.Types.XenAPIException;
import com.xensource.xenapi.Types.IpConfigurationMode;
import com.xensource.xenapi.VBD;
import com.xensource.xenapi.VDI;
import com.xensource.xenapi.VIF;
@ -933,9 +933,8 @@ public abstract class CitrixResourceBase implements ServerResource {
protected SetPortForwardingRulesAnswer execute(SetPortForwardingRulesCommand cmd) {
Connection conn = getConnection();
String args;
String routerIp = cmd.getAccessDetail("router.ip");
String routerName = cmd.getAccessDetail("router.name");
String routerName = cmd.getAccessDetail(RoutingCommand.ROUTER_NAME);
String routerIp = cmd.getAccessDetail(RoutingCommand.ROUTER_IP);
String[] results = new String[cmd.getRules().length];
int i = 0;
for (PortForwardingRuleTO rule : cmd.getRules()) {
@ -1252,10 +1251,13 @@ public abstract class CitrixResourceBase implements ServerResource {
Connection conn = getConnection();
String[] results = new String[cmd.getIpAddresses().length];
int i = 0;
String routerName = cmd.getAccessDetail(RoutingCommand.ROUTER_NAME);
String routerIp = cmd.getAccessDetail(RoutingCommand.ROUTER_IP);
try {
IpAddressTO[] ips = cmd.getIpAddresses();
IpAddressTO[] ips = cmd.getIpAddresses();
for (IpAddressTO ip : ips) {
assignPublicIpAddress(conn, cmd.getRouterName(), cmd.getRouterIp(), ip.getPublicIp(), ip.isAdd(), ip.isFirstIP(), ip.isSourceNat(), ip.getVlanId(),
assignPublicIpAddress(conn, routerName, routerIp, ip.getPublicIp(), ip.isAdd(), ip.isFirstIP(), ip.isSourceNat(), ip.getVlanId(),
ip.getVlanGateway(), ip.getVlanNetmask(), ip.getVifMacAddress(), ip.getGuestIp());
results[i++] = ip.getPublicIp() + " - success";
}

View File

@ -52,6 +52,7 @@ import com.cloud.agent.api.routing.DhcpEntryCommand;
import com.cloud.agent.api.routing.IPAssocCommand;
import com.cloud.agent.api.routing.LoadBalancerConfigCommand;
import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand;
import com.cloud.agent.api.routing.RoutingCommand;
import com.cloud.agent.api.routing.SavePasswordCommand;
import com.cloud.agent.api.routing.SetPortForwardingRulesCommand;
import com.cloud.agent.api.routing.VmDataCommand;
@ -2040,7 +2041,10 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute
ipsToSend[i++] = ip;
firstIP = false;
}
cmds.addCommand("IPAssocCommand", new IPAssocCommand(router.getInstanceName(), router.getPrivateIpAddress(), ipsToSend));
IPAssocCommand cmd = new IPAssocCommand(ipsToSend);
cmd.setAccessDetail(RoutingCommand.ROUTER_IP, router.getPrivateIpAddress());
cmd.setAccessDetail(RoutingCommand.ROUTER_NAME, router.getInstanceName());
cmds.addCommand("IPAssocCommand", cmd);
}
return cmds;
}
@ -2083,6 +2087,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute
Commands cmds = new Commands(OnError.Continue);
//We have to resend all already associated ip addresses
cmds = getAssociateIPCommands(router, ipAddress, cmds, 0);
return sendCommandsToRouter(router, cmds);
} else if (router.getState() == State.Stopped || router.getState() == State.Stopping){
return true;
@ -2112,6 +2117,8 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute
}
LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs);
cmd.setAccessDetail(RoutingCommand.ROUTER_IP, router.getPrivateIpAddress());
cmd.setAccessDetail(RoutingCommand.ROUTER_NAME, router.getInstanceName());
cmds.addCommand(cmd);
//Send commands to router
@ -2129,6 +2136,8 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute
pfs.add(pf);
}
SetPortForwardingRulesCommand cmd = new SetPortForwardingRulesCommand(pfs);
cmd.setAccessDetail(RoutingCommand.ROUTER_IP, router.getPrivateIpAddress());
cmd.setAccessDetail(RoutingCommand.ROUTER_NAME, router.getInstanceName());
cmds.addCommand(cmd);
//Send commands to router