diff --git a/api/src/com/cloud/agent/api/routing/IPAssocCommand.java b/api/src/com/cloud/agent/api/routing/IPAssocCommand.java index 4822c463d96..e1608746a24 100644 --- a/api/src/com/cloud/agent/api/routing/IPAssocCommand.java +++ b/api/src/com/cloud/agent/api/routing/IPAssocCommand.java @@ -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; } diff --git a/api/src/com/cloud/agent/api/routing/RoutingCommand.java b/api/src/com/cloud/agent/api/routing/RoutingCommand.java index 37c94f1de7c..8cd18152514 100644 --- a/api/src/com/cloud/agent/api/routing/RoutingCommand.java +++ b/api/src/com/cloud/agent/api/routing/RoutingCommand.java @@ -24,6 +24,9 @@ import com.cloud.agent.api.Command; public abstract class RoutingCommand extends Command { HashMap accessDetails = new HashMap(0); + public static final String ROUTER_NAME = "router.name"; + public static final String ROUTER_IP = "router.ip"; + protected RoutingCommand() { super(); } diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index b7a2bb7ab3b..284e56acd12 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -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 { diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 2bf9eb2a4aa..1038207b0e9 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -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"; } diff --git a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java index c0a18e55354..129e01989ff 100644 --- a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java +++ b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java @@ -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