Return-Path: X-Original-To: apmail-cloudstack-commits-archive@www.apache.org Delivered-To: apmail-cloudstack-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 317D11013C for ; Thu, 20 Feb 2014 03:47:58 +0000 (UTC) Received: (qmail 37957 invoked by uid 500); 20 Feb 2014 03:47:57 -0000 Delivered-To: apmail-cloudstack-commits-archive@cloudstack.apache.org Received: (qmail 37722 invoked by uid 500); 20 Feb 2014 03:47:56 -0000 Mailing-List: contact commits-help@cloudstack.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cloudstack.apache.org Delivered-To: mailing list commits@cloudstack.apache.org Received: (qmail 36812 invoked by uid 99); 20 Feb 2014 03:47:48 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Feb 2014 03:47:48 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 6933F928B20; Thu, 20 Feb 2014 03:47:44 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: yasker@apache.org To: commits@cloudstack.apache.org Date: Thu, 20 Feb 2014 03:47:45 -0000 Message-Id: <556aaf4b6437415ebca20a8a06b78cbb@git.apache.org> In-Reply-To: <19164c7f996342cc9a93226faf145b2f@git.apache.org> References: <19164c7f996342cc9a93226faf145b2f@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [2/7] git commit: updated refs/heads/master to 3bbbda8 CLOUDSTACK-6047: Separate VR command generation and execution Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/8fccb8c0 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/8fccb8c0 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/8fccb8c0 Branch: refs/heads/master Commit: 8fccb8c077c7f228521628edb40313ae0c160af8 Parents: 5332f67 Author: Sheng Yang Authored: Wed Feb 19 19:12:06 2014 -0800 Committer: Sheng Yang Committed: Wed Feb 19 19:46:55 2014 -0800 ---------------------------------------------------------------------- .../virtualnetwork/VirtualRoutingResource.java | 686 ++++++++++++------- 1 file changed, 449 insertions(+), 237 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8fccb8c0/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java ---------------------------------------------------------------------- diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 2ac6f4f..d51e8bb 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -74,6 +74,7 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.SocketChannel; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -200,7 +201,43 @@ public class VirtualRoutingResource { } } - private Answer execute(VpnUsersCfgCommand cmd) { + protected class ConfigItem { + private String script; + private String args; + private String info; + + public ConfigItem(String script, String args) { + this.script = script; + this.args = args; + } + + public String getScript() { + return script; + } + + public void setScript(String script) { + this.script = script; + } + + public String getArgs() { + return args; + } + + public void setArgs(String args) { + this.args = args; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + } + + private List generateConfig(VpnUsersCfgCommand cmd) { + LinkedList cfg = new LinkedList<>(); for (VpnUsersCfgCommand.UsernamePassword userpwd : cmd.getUserpwds()) { String args = ""; if (!userpwd.isAdd()) { @@ -210,15 +247,24 @@ public class VirtualRoutingResource { args += "-u "; args += userpwd.getUsernamePassword(); } - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPN_L2TP, args); + cfg.add(new ConfigItem(VRScripts.VPN_L2TP, args)); + } + return cfg; + } + + private Answer execute(VpnUsersCfgCommand cmd) { + List cfg = generateConfig(cmd); + for (ConfigItem c : cfg) { + ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); if (!result.isSuccess()) { - return new Answer(cmd, false, "Configure VPN user failed for user " + userpwd.getUsername() + ":" + result.getDetails()); + return new Answer(cmd, false, "Configure VPN user failed: " + result.getDetails()); } } return new Answer(cmd); } - private Answer execute(RemoteAccessVpnCfgCommand cmd) { + private List generateConfig(RemoteAccessVpnCfgCommand cmd) { + LinkedList cfg = new LinkedList<>(); String args = ""; if (cmd.isCreate()) { args += "-r "; @@ -237,18 +283,21 @@ public class VirtualRoutingResource { } args += " -C " + cmd.getLocalCidr(); args += " -i " + cmd.getPublicInterface(); - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPN_L2TP, args); + cfg.add(new ConfigItem(VRScripts.VPN_L2TP, args)); + return cfg; + } + + private Answer execute(RemoteAccessVpnCfgCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); return new Answer(cmd, result.isSuccess(), result.getDetails()); } - private Answer execute(SetFirewallRulesCommand cmd) { - String[] results = new String[cmd.getRules().length]; - String routerAccessIp = cmd.getRouterAccessIp(); - String egressDefault = cmd.getAccessDetail(NetworkElementCommand.FIREWALL_EGRESS_DEFAULT); + private List generateConfig(SetFirewallRulesCommand cmd) { + LinkedList cfg = new LinkedList<>(); - if (routerAccessIp == null) { - return new SetFirewallRulesAnswer(cmd, false, results); - } + String egressDefault = cmd.getAccessDetail(NetworkElementCommand.FIREWALL_EGRESS_DEFAULT); FirewallRuleTO[] allrules = cmd.getRules(); FirewallRule.TrafficType trafficType = allrules[0].getTrafficType(); @@ -276,14 +325,27 @@ public class VirtualRoutingResource { args += " -a " + sb.toString(); } - ExecutionResult result; - if (trafficType == FirewallRule.TrafficType.Egress) { - result = _vrDeployer.executeInVR(routerAccessIp, VRScripts.FIREWALL_EGRESS, args); + cfg.add(new ConfigItem(VRScripts.FIREWALL_EGRESS, args)); } else { - result = _vrDeployer.executeInVR(routerAccessIp, VRScripts.FIREWALL_INGRESS, args); + cfg.add(new ConfigItem(VRScripts.FIREWALL_INGRESS, args)); } + return cfg; + } + + private Answer execute(SetFirewallRulesCommand cmd) { + String[] results = new String[cmd.getRules().length]; + String routerAccessIp = cmd.getRouterAccessIp(); + + if (routerAccessIp == null) { + return new SetFirewallRulesAnswer(cmd, false, results); + } + + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + ExecutionResult result = _vrDeployer.executeInVR(routerAccessIp, c.getScript(), c.getArgs()); + if (!result.isSuccess()) { //FIXME - in the future we have to process each rule separately; now we temporarily set every rule to be false if single rule fails for (int i = 0; i < results.length; i++) { @@ -295,10 +357,9 @@ public class VirtualRoutingResource { } - private Answer execute(SetPortForwardingRulesCommand cmd) { - String[] results = new String[cmd.getRules().length]; - int i = 0; - boolean endResult = true; + private List generateConfig(SetPortForwardingRulesCommand cmd) { + LinkedList cfg = new LinkedList<>(); + for (PortForwardingRuleTO rule : cmd.getRules()) { StringBuilder args = new StringBuilder(); args.append(rule.revoked() ? " -D " : " -A "); @@ -307,8 +368,20 @@ public class VirtualRoutingResource { args.append(" -p ").append(rule.getStringSrcPortRange()); args.append(" -r ").append(rule.getDstIp()); args.append(" -d ").append(rule.getStringDstPortRange()); + cfg.add(new ConfigItem(VRScripts.FIREWALL_NAT, args.toString())); + } + + return cfg; + } + + private Answer execute(SetPortForwardingRulesCommand cmd) { + String[] results = new String[cmd.getRules().length]; + int i = 0; + boolean endResult = true; + List cfg = generateConfig(cmd); - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.FIREWALL_NAT, args.toString()); + for (ConfigItem c : cfg) { + ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); if (!result.isSuccess()) { results[i++] = "Failed"; @@ -321,51 +394,45 @@ public class VirtualRoutingResource { return new SetPortForwardingRulesAnswer(cmd, results, endResult); } - protected SetStaticNatRulesAnswer SetVPCStaticNatRules(SetStaticNatRulesCommand cmd) { - String[] results = new String[cmd.getRules().length]; - int i = 0; - boolean endResult = true; + private List generateConfig(SetStaticNatRulesCommand cmd) { + LinkedList cfg = new LinkedList<>(); + if (cmd.getVpcId() != null) { + for (StaticNatRuleTO rule : cmd.getRules()) { + String args = rule.revoked() ? " -D" : " -A"; + args += " -l " + rule.getSrcIp(); + args += " -r " + rule.getDstIp(); - for (StaticNatRuleTO rule : cmd.getRules()) { - String args = rule.revoked() ? " -D" : " -A"; - args += " -l " + rule.getSrcIp(); - args += " -r " + rule.getDstIp(); + cfg.add(new ConfigItem(VRScripts.VPC_STATIC_NAT, args)); + } + } else { + for (StaticNatRuleTO rule : cmd.getRules()) { + //1:1 NAT needs instanceip;publicip;domrip;op + StringBuilder args = new StringBuilder(); + args.append(rule.revoked() ? " -D " : " -A "); + args.append(" -l ").append(rule.getSrcIp()); + args.append(" -r ").append(rule.getDstIp()); + + if (rule.getProtocol() != null) { + args.append(" -P ").append(rule.getProtocol().toLowerCase()); + } - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_STATIC_NAT, args); + args.append(" -d ").append(rule.getStringSrcPortRange()); + args.append(" -G "); - if (!result.isSuccess()) { - results[i++] = null; - } else { - results[i++] = "Failed"; - endResult = false; + cfg.add(new ConfigItem(VRScripts.FIREWALL_NAT, args.toString())); } } - return new SetStaticNatRulesAnswer(cmd, results, endResult); - + return cfg; } private SetStaticNatRulesAnswer execute(SetStaticNatRulesCommand cmd) { - if (cmd.getVpcId() != null) { - return SetVPCStaticNatRules(cmd); - } String[] results = new String[cmd.getRules().length]; int i = 0; boolean endResult = true; - for (StaticNatRuleTO rule : cmd.getRules()) { - //1:1 NAT needs instanceip;publicip;domrip;op - StringBuilder args = new StringBuilder(); - args.append(rule.revoked() ? " -D " : " -A "); - args.append(" -l ").append(rule.getSrcIp()); - args.append(" -r ").append(rule.getDstIp()); - - if (rule.getProtocol() != null) { - args.append(" -P ").append(rule.getProtocol().toLowerCase()); - } - args.append(" -d ").append(rule.getStringSrcPortRange()); - args.append(" -G "); - - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.FIREWALL_NAT, args.toString()); + List cfg = generateConfig(cmd); + for (ConfigItem c : cfg) { + ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); if (!result.isSuccess()) { results[i++] = "Failed"; @@ -378,29 +445,11 @@ public class VirtualRoutingResource { return new SetStaticNatRulesAnswer(cmd, results, endResult); } - private Answer execute(LoadBalancerConfigCommand cmd) { - String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); - - if (routerIp == null) { - return new Answer(cmd); - } + private List generateConfig(LoadBalancerConfigCommand cmd) { + LinkedList cfg = new LinkedList<>(); + String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); LoadBalancerConfigurator cfgtr = new HAProxyConfigurator(); - String[] config = cfgtr.generateConfiguration(cmd); - String tmpCfgFileContents = ""; - for (int i = 0; i < config.length; i++) { - tmpCfgFileContents += config[i]; - tmpCfgFileContents += "\n"; - } - - String tmpCfgFilePath = "/etc/haproxy/"; - String tmpCfgFileName = "haproxy.cfg.new"; - ExecutionResult result = _vrDeployer.createFileInVR(cmd.getRouterAccessIp(), tmpCfgFilePath, tmpCfgFileName, tmpCfgFileContents); - - if (!result.isSuccess()) { - return new Answer(cmd, false, "Fail to copy LB config file to VR"); - } - String[][] rules = cfgtr.generateFwRules(cmd); String[] addRules = rules[LoadBalancerConfigurator.ADD]; @@ -436,17 +485,48 @@ public class VirtualRoutingResource { if (cmd.getVpcId() == null) { args = " -i " + routerIp + args; - result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.LB, args); + cfg.add(new ConfigItem(VRScripts.LB, args)); } else { args = " -i " + cmd.getNic().getIp() + args; - result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_LB, args); + cfg.add(new ConfigItem(VRScripts.VPC_LB, args)); } + return cfg; + } + + private Answer execute(LoadBalancerConfigCommand cmd) { + String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); + + if (routerIp == null) { + return new Answer(cmd); + } + + LoadBalancerConfigurator cfgtr = new HAProxyConfigurator(); + String[] config = cfgtr.generateConfiguration(cmd); + String tmpCfgFileContents = ""; + for (int i = 0; i < config.length; i++) { + tmpCfgFileContents += config[i]; + tmpCfgFileContents += "\n"; + } + + String tmpCfgFilePath = "/etc/haproxy/"; + String tmpCfgFileName = "haproxy.cfg.new"; + ExecutionResult result = _vrDeployer.createFileInVR(cmd.getRouterAccessIp(), tmpCfgFilePath, tmpCfgFileName, tmpCfgFileContents); + + if (!result.isSuccess()) { + return new Answer(cmd, false, "Fail to copy LB config file to VR"); + } + + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); + return new Answer(cmd, result.isSuccess(), result.getDetails()); } - protected Answer execute(VmDataCommand cmd) { + private List generateConfig(VmDataCommand cmd) { + LinkedList cfg = new LinkedList<>(); Map> data = new HashMap>(); data.put(cmd.getVmIpAddress(), cmd.getVmData()); @@ -457,22 +537,40 @@ public class VirtualRoutingResource { String args = "-d " + json; - final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VMDATA, args); + cfg.add(new ConfigItem(VRScripts.VMDATA, args)); + return cfg; + } + + protected Answer execute(VmDataCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); return new Answer(cmd, result.isSuccess(), result.getDetails()); } - protected Answer execute(final SavePasswordCommand cmd) { + private List generateConfig(SavePasswordCommand cmd) { + LinkedList cfg = new LinkedList<>(); + final String password = cmd.getPassword(); final String vmIpAddress = cmd.getVmIpAddress(); String args = "-v " + vmIpAddress; args += " -p " + password; - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.PASSWORD, args); + cfg.add(new ConfigItem(VRScripts.PASSWORD, args)); + return cfg; + } + + protected Answer execute(final SavePasswordCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); return new Answer(cmd, result.isSuccess(), result.getDetails()); } - protected Answer execute(final DhcpEntryCommand cmd) { + private List generateConfig(DhcpEntryCommand cmd) { + LinkedList cfg = new LinkedList<>(); + String args = " -m " + cmd.getVmMac(); if (cmd.getVmIpAddress() != null) { args += " -4 " + cmd.getVmIpAddress(); @@ -499,22 +597,41 @@ public class VirtualRoutingResource { if (!cmd.isDefault()) { args += " -N"; } + cfg.add(new ConfigItem(VRScripts.DHCP, args)); + + return cfg; + } - final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.DHCP, args); + protected Answer execute(final DhcpEntryCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); return new Answer(cmd, result.isSuccess(), result.getDetails()); } - protected Answer execute(final CreateIpAliasCommand cmd) { + private List generateConfig(CreateIpAliasCommand cmd) { + LinkedList cfg = new LinkedList<>(); + List ipAliasTOs = cmd.getIpAliasList(); String args = ""; for (IpAliasTO ipaliasto : ipAliasTOs) { args = args + ipaliasto.getAlias_count() + ":" + ipaliasto.getRouterip() + ":" + ipaliasto.getNetmask() + "-"; } - final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.IPALIAS_CREATE, args); + + cfg.add(new ConfigItem(VRScripts.IPALIAS_CREATE, args)); + return cfg; + } + + protected Answer execute(final CreateIpAliasCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); return new Answer(cmd, result.isSuccess(), result.getDetails()); } - protected Answer execute(final DeleteIpAliasCommand cmd) { + private List generateConfig(DeleteIpAliasCommand cmd) { + LinkedList cfg = new LinkedList<>(); + String args = ""; List revokedIpAliasTOs = cmd.getDeleteIpAliasTos(); for (IpAliasTO ipAliasTO : revokedIpAliasTOs) { @@ -526,17 +643,35 @@ public class VirtualRoutingResource { for (IpAliasTO ipAliasTO : activeIpAliasTOs) { args = args + ipAliasTO.getAlias_count() + ":" + ipAliasTO.getRouterip() + ":" + ipAliasTO.getNetmask() + "-"; } - final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.IPALIAS_DELETE, args); + + cfg.add(new ConfigItem(VRScripts.IPALIAS_DELETE, args)); + return cfg; + } + + protected Answer execute(final DeleteIpAliasCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); return new Answer(cmd, result.isSuccess(), result.getDetails()); } - protected Answer execute(final DnsMasqConfigCommand cmd) { + private List generateConfig(DnsMasqConfigCommand cmd) { + LinkedList cfg = new LinkedList<>(); + List dhcpTos = cmd.getIps(); String args = ""; for (DhcpTO dhcpTo : dhcpTos) { args = args + dhcpTo.getRouterIp() + ":" + dhcpTo.getGateway() + ":" + dhcpTo.getNetmask() + ":" + dhcpTo.getStartIpOfSubnet() + "-"; } - final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.DNSMASQ_CONFIG, args); + + cfg.add(new ConfigItem(VRScripts.DNSMASQ_CONFIG, args)); + return cfg; + } + + protected Answer execute(final DnsMasqConfigCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); return new Answer(cmd, result.isSuccess(), result.getDetails()); } @@ -558,8 +693,16 @@ public class VirtualRoutingResource { return new CheckRouterAnswer(cmd, result.getDetails(), true); } + private List generateConfig(BumpUpPriorityCommand cmd) { + LinkedList cfg = new LinkedList<>(); + cfg.add(new ConfigItem(VRScripts.RVR_BUMPUP_PRI, null)); + return cfg; + } + protected Answer execute(BumpUpPriorityCommand cmd) { - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.RVR_BUMPUP_PRI, null); + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); return new Answer(cmd, result.isSuccess(), result.getDetails()); } @@ -575,7 +718,9 @@ public class VirtualRoutingResource { return new GetDomRVersionAnswer(cmd, result.getDetails(), lines[0], lines[1]); } - protected Answer execute(Site2SiteVpnCfgCommand cmd) { + private List generateConfig(Site2SiteVpnCfgCommand cmd) { + LinkedList cfg = new LinkedList<>(); + String args = ""; if (cmd.isCreate()) { args += "-A"; @@ -617,32 +762,43 @@ public class VirtualRoutingResource { args += " -N "; args += cmd.getPeerGuestCidrList(); } - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.S2SVPN_IPSEC, args); - if (!result.isSuccess()) { - return new Answer(cmd, false, "Configure site to site VPN failed due to " + result.getDetails()); - } - return new Answer(cmd); + + cfg.add(new ConfigItem(VRScripts.S2SVPN_IPSEC, args)); + return cfg; } - protected Answer execute(SetMonitorServiceCommand cmd) { + protected Answer execute(Site2SiteVpnCfgCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); + return new Answer(cmd, result.isSuccess(), result.getDetails()); + } + + protected List generateConfig(SetMonitorServiceCommand cmd) { + LinkedList cfg = new LinkedList<>(); + String config = cmd.getConfiguration(); String disableMonitoring = cmd.getAccessDetail(NetworkElementCommand.ROUTER_MONITORING_ENABLE); - String args = " -c " + config; if (disableMonitoring != null) { args = args + " -d"; } - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.MONITOR_SERVICE, args); + cfg.add(new ConfigItem(VRScripts.MONITOR_SERVICE, args)); + return cfg; + } - if (!result.isSuccess()) { - return new Answer(cmd, false, result.getDetails()); - } - return new Answer(cmd); + protected Answer execute(SetMonitorServiceCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); + return new Answer(cmd, result.isSuccess(), result.getDetails()); } - protected Answer execute(SetupGuestNetworkCommand cmd) { + protected List generateConfig(SetupGuestNetworkCommand cmd) { + LinkedList cfg = new LinkedList<>(); + NicTO nic = cmd.getNic(); String routerGIP = cmd.getAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP); String gateway = cmd.getAccessDetail(NetworkElementCommand.GUEST_NETWORK_GATEWAY); @@ -675,62 +831,72 @@ public class VirtualRoutingResource { if (domainName != null && !domainName.isEmpty()) { args += " -e " + domainName; } - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_GUEST_NETWORK, args); - if (!result.isSuccess()) { - return new Answer(cmd, false, "Creating guest network failed due to " + result.getDetails()); - } - return new Answer(cmd, true, "success"); + cfg.add(new ConfigItem(VRScripts.VPC_GUEST_NETWORK, args)); + return cfg; } - private SetNetworkACLAnswer execute(SetNetworkACLCommand cmd) { - String[] results = new String[cmd.getRules().length]; + protected Answer execute(SetupGuestNetworkCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); + return new Answer(cmd, result.isSuccess(), result.getDetails()); + } + + protected List generateConfig(SetNetworkACLCommand cmd) { + LinkedList cfg = new LinkedList<>(); String privateGw = cmd.getAccessDetail(NetworkElementCommand.VPC_PRIVATE_GATEWAY); - try { - String[][] rules = cmd.generateFwRules(); - String[] aclRules = rules[0]; - NicTO nic = cmd.getNic(); - String dev = "eth" + nic.getDeviceId(); - String netmask = Long.toString(NetUtils.getCidrSize(nic.getNetmask())); - StringBuilder sb = new StringBuilder(); - - for (int i = 0; i < aclRules.length; i++) { - sb.append(aclRules[i]).append(','); - } + String[][] rules = cmd.generateFwRules(); + String[] aclRules = rules[0]; + NicTO nic = cmd.getNic(); + String dev = "eth" + nic.getDeviceId(); + String netmask = Long.toString(NetUtils.getCidrSize(nic.getNetmask())); + StringBuilder sb = new StringBuilder(); - String rule = sb.toString(); - ExecutionResult result; + for (int i = 0; i < aclRules.length; i++) { + sb.append(aclRules[i]).append(','); + } - String args = " -d " + dev; - args += " -M " + nic.getMac(); - if (privateGw != null) { - args += " -a " + rule; - result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_PRIVATEGW_ACL, args); - } else { - args += " -i " + nic.getIp(); - args += " -m " + netmask; - args += " -a " + rule; - result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_ACL, args); - } + String rule = sb.toString(); - if (!result.isSuccess()) { - for (int i = 0; i < results.length; i++) { - results[i] = "Failed"; - } - return new SetNetworkACLAnswer(cmd, false, results); - } + String args = " -d " + dev; + args += " -M " + nic.getMac(); + if (privateGw != null) { + args += " -a " + rule; + + cfg.add(new ConfigItem(VRScripts.VPC_PRIVATEGW_ACL, args)); + } else { + args += " -i " + nic.getIp(); + args += " -m " + netmask; + args += " -a " + rule; + cfg.add(new ConfigItem(VRScripts.VPC_ACL, args)); + } + + return cfg; + } - return new SetNetworkACLAnswer(cmd, true, results); - } catch (Exception e) { - String msg = "SetNetworkACL failed due to " + e.toString(); - s_logger.error(msg, e); + private SetNetworkACLAnswer execute(SetNetworkACLCommand cmd) { + String[] results = new String[cmd.getRules().length]; + + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); + + if (!result.isSuccess()) { + for (int i = 0; i < results.length; i++) { + results[i] = "Failed"; + } return new SetNetworkACLAnswer(cmd, false, results); } + + return new SetNetworkACLAnswer(cmd, true, results); } - protected Answer execute(SetSourceNatCommand cmd) { + protected List generateConfig(SetSourceNatCommand cmd) { + LinkedList cfg = new LinkedList<>(); + IpAddressTO pubIP = cmd.getIpAddress(); String dev = "eth" + pubIP.getNicDevId(); String args = " -A "; @@ -738,15 +904,21 @@ public class VirtualRoutingResource { args += pubIP.getPublicIp(); args += " -c "; args += dev; - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_SOURCE_NAT, args); + + cfg.add(new ConfigItem(VRScripts.VPC_SOURCE_NAT, args)); + return cfg; + } + + protected Answer execute(SetSourceNatCommand cmd) { + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); return new Answer(cmd, result.isSuccess(), result.getDetails()); } - private SetPortForwardingRulesAnswer execute(SetPortForwardingRulesVpcCommand cmd) { - String[] results = new String[cmd.getRules().length]; - int i = 0; + protected List generateConfig(SetPortForwardingRulesVpcCommand cmd) { + LinkedList cfg = new LinkedList<>(); - boolean endResult = true; for (PortForwardingRuleTO rule : cmd.getRules()) { String args = rule.revoked() ? " -D" : " -A"; args += " -P " + rule.getProtocol().toLowerCase(); @@ -755,7 +927,20 @@ public class VirtualRoutingResource { args += " -r " + rule.getDstIp(); args += " -d " + rule.getStringDstPortRange().replace(":", "-"); - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_PORTFORWARDING, args); + cfg.add(new ConfigItem(VRScripts.VPC_PORTFORWARDING, args)); + } + + return cfg; + } + + private SetPortForwardingRulesAnswer execute(SetPortForwardingRulesVpcCommand cmd) { + String[] results = new String[cmd.getRules().length]; + int i = 0; + + boolean endResult = true; + List cfg = generateConfig(cmd); + for (ConfigItem c : cfg) { + ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); if (!result.isSuccess()) { results[i++] = "Failed"; @@ -769,82 +954,135 @@ public class VirtualRoutingResource { public IpAssocAnswer execute(IpAssocVpcCommand cmd) { String[] results = new String[cmd.getIpAddresses().length]; - String args = ""; - String snatArgs = ""; for (int i = 0; i < cmd.getIpAddresses().length; i ++) { results[i] = "Failed"; } int i = 0; - for (IpAddressTO ip : cmd.getIpAddresses()) { - if (ip.isAdd()) { - args += " -A "; - snatArgs += " -A "; - } else { - args += " -D "; - snatArgs += " -D "; - } - - args += " -l "; - args += ip.getPublicIp(); - String nicName = "eth" + ip.getNicDevId(); - args += " -c "; - args += nicName; - args += " -g "; - args += ip.getVlanGateway(); - args += " -m "; - args += Long.toString(NetUtils.getCidrSize(ip.getVlanNetmask())); - args += " -n "; - args += NetUtils.getSubNet(ip.getPublicIp(), ip.getVlanNetmask()); - - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_IPASSOC, args); + List cfg = generateConfig(cmd); + for (ConfigItem c : cfg) { + ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); if (!result.isSuccess()) { - results[i++] = ip.getPublicIp() + " - vpc_ipassoc failed:" + result.getDetails(); + results[i++] = c.getInfo() + " failed: " + result.getDetails(); break; } - if (ip.isSourceNat()) { - snatArgs += " -l " + ip.getPublicIp(); - snatArgs += " -c " + nicName; - - result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_PRIVATEGW, snatArgs); - if (result != null) { - results[i++] = ip.getPublicIp() + " - vpc_privateGateway failed:" + result.getDetails(); - break; - } - } - results[i++] = ip.getPublicIp() + " - success "; + results[i++] = c.getInfo() + " - success "; } return new IpAssocAnswer(cmd, results); } + protected List generateConfig(SetStaticRouteCommand cmd) { + LinkedList cfg = new LinkedList<>(); + + String[][] rules = cmd.generateSRouteRules(); + StringBuilder sb = new StringBuilder(); + String[] srRules = rules[0]; + + for (int i = 0; i < srRules.length; i++) { + sb.append(srRules[i]).append(','); + } + + String args = " -a " + sb.toString(); + + cfg.add(new ConfigItem(VRScripts.VPC_STATIC_ROUTE, args)); + return cfg; + } + private SetStaticRouteAnswer execute(SetStaticRouteCommand cmd) { - try { - String[] results = new String[cmd.getStaticRoutes().length]; - String[][] rules = cmd.generateSRouteRules(); - StringBuilder sb = new StringBuilder(); - String[] srRules = rules[0]; + String[] results = new String[cmd.getStaticRoutes().length]; + + List cfg = generateConfig(cmd); + ConfigItem c = cfg.get(0); + final ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); - for (int i = 0; i < srRules.length; i++) { - sb.append(srRules[i]).append(','); + if (!result.isSuccess()) { + for (int i = 0; i < results.length; i++) { + results[i] = "Failed"; } + return new SetStaticRouteAnswer(cmd, false, results); + } - String args = " -a " + sb.toString(); - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VPC_STATIC_ROUTE, args); + return new SetStaticRouteAnswer(cmd, true, results); + } - if (!result.isSuccess()) { - for (int i = 0; i < results.length; i++) { - results[i] = "Failed"; + protected List generateConfig(IpAssocCommand cmd) { + LinkedList cfg = new LinkedList<>(); + ConfigItem c; + + if (cmd instanceof IpAssocVpcCommand) { + for (IpAddressTO ip : cmd.getIpAddresses()) { + String args = ""; + String snatArgs = ""; + + if (ip.isAdd()) { + args += " -A "; + snatArgs += " -A "; + } else { + args += " -D "; + snatArgs += " -D "; + } + + args += " -l "; + args += ip.getPublicIp(); + String nicName = "eth" + ip.getNicDevId(); + args += " -c "; + args += nicName; + args += " -g "; + args += ip.getVlanGateway(); + args += " -m "; + args += Long.toString(NetUtils.getCidrSize(ip.getVlanNetmask())); + args += " -n "; + args += NetUtils.getSubNet(ip.getPublicIp(), ip.getVlanNetmask()); + + c = new ConfigItem(VRScripts.VPC_IPASSOC, args); + c.setInfo(ip.getPublicIp() + " - vpc_ipassoc"); + cfg.add(c); + + if (ip.isSourceNat()) { + snatArgs += " -l " + ip.getPublicIp(); + snatArgs += " -c " + nicName; + + c = new ConfigItem(VRScripts.VPC_PRIVATEGW, snatArgs); + c.setInfo(ip.getPublicIp() + " - vpc_privategateway"); + cfg.add(c); } - return new SetStaticRouteAnswer(cmd, false, results); } + } else { + for (IpAddressTO ip: cmd.getIpAddresses()) { + String args = ""; + if (ip.isAdd()) { + args += "-A"; + } else { + args += "-D"; + } + String cidrSize = Long.toString(NetUtils.getCidrSize(ip.getVlanNetmask())); + if (ip.isSourceNat()) { + args += " -s"; + } + if (ip.isFirstIP()) { + args += " -f"; + } + args += " -l "; + args += ip.getPublicIp() + "/" + cidrSize; - return new SetStaticRouteAnswer(cmd, true, results); - } catch (Exception e) { - String msg = "SetStaticRoute failed due to " + e.toString(); - s_logger.error(msg, e); - return new SetStaticRouteAnswer(cmd, false, null); + String publicNic = "eth" + ip.getNicDevId(); + args += " -c "; + args += publicNic; + + args += " -g "; + args += ip.getVlanGateway(); + + if (ip.isNewNic()) { + args += " -n"; + } + + c = new ConfigItem(VRScripts.IPASSOC, args); + c.setInfo(ip.getPublicIp()); + cfg.add(c); + } } + return cfg; } public Answer execute(IpAssocCommand cmd) { @@ -854,39 +1092,13 @@ public class VirtualRoutingResource { } int i = 0; - for (IpAddressTO ip: cmd.getIpAddresses()) { - String args = ""; - if (ip.isAdd()) { - args += "-A"; - } else { - args += "-D"; - } - String cidrSize = Long.toString(NetUtils.getCidrSize(ip.getVlanNetmask())); - if (ip.isSourceNat()) { - args += " -s"; - } - if (ip.isFirstIP()) { - args += " -f"; - } - args += " -l "; - args += ip.getPublicIp() + "/" + cidrSize; - - String publicNic = "eth" + ip.getNicDevId(); - args += " -c "; - args += publicNic; - - args += " -g "; - args += ip.getVlanGateway(); - - if (ip.isNewNic()) { - args += " -n"; - } - - ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.IPASSOC, args); + List cfg = generateConfig(cmd); + for (ConfigItem c : cfg) { + ExecutionResult result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), c.getScript(), c.getArgs()); if (result.isSuccess()) { - results[i++] = ip.getPublicIp() + " - success"; + results[i++] = c.getInfo() + " - success"; } else { - results[i++] = ip.getPublicIp() + " - failed:" + result.getDetails(); + results[i++] = c.getInfo() + " - failed:" + result.getDetails(); break; } }