You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ch...@apache.org on 2012/10/15 22:29:47 UTC

[6/50] [abbrv] git commit: [PATCH] CLOUDSTACK-335: fix lb for vpc on kvm

[PATCH] CLOUDSTACK-335: fix lb for vpc on kvm


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/9a558d46
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/9a558d46
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/9a558d46

Branch: refs/heads/junit-tests
Commit: 9a558d46157f46e24415faa72194212cc4a7c49c
Parents: a23bdab
Author: Edison Su <su...@gmail.com>
Authored: Fri Oct 12 18:24:50 2012 -0700
Committer: Chip Childers <ch...@gmail.com>
Committed: Mon Oct 15 16:19:21 2012 -0400

----------------------------------------------------------------------
 .../virtualnetwork/VirtualRoutingResource.java     |   72 ++++++++++++++-
 1 files changed, 71 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/9a558d46/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 2bb1145..7e53f03 100755
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
+++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
@@ -80,6 +80,7 @@ import com.cloud.utils.component.Manager;
 import com.cloud.utils.net.NetUtils;
 import com.cloud.utils.script.OutputInterpreter;
 import com.cloud.utils.script.Script;
+import com.cloud.utils.ssh.SshHelper;
 
 /**
  * VirtualNetworkResource controls and configures virtual networking
@@ -298,8 +299,77 @@ public class VirtualRoutingResource implements Manager {
         return new SetStaticNatRulesAnswer(cmd, results, endResult);
     }
     
+    protected Answer VPCLoadBalancerConfig(final 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";
+        }
+        File permKey = new File("/root/.ssh/id_rsa.cloud");
+       
+        try {
+        	SshHelper.scpTo(routerIp, 3922, "root", permKey, null, "/etc/haproxy/", tmpCfgFileContents.getBytes(), "haproxy.cfg.new", null);
+
+        	String[][] rules = cfgtr.generateFwRules(cmd);
+
+        	String[] addRules = rules[LoadBalancerConfigurator.ADD];
+        	String[] removeRules = rules[LoadBalancerConfigurator.REMOVE];
+        	String[] statRules = rules[LoadBalancerConfigurator.STATS];
+
+        	String ip = cmd.getNic().getIp();
+        	String args = " -i " + ip;
+        	StringBuilder sb = new StringBuilder();
+        	if (addRules.length > 0) {
+        		for (int i = 0; i < addRules.length; i++) {
+        			sb.append(addRules[i]).append(',');
+        		}
+
+        		args += " -a " + sb.toString();
+        	}
+
+        	sb = new StringBuilder();
+        	if (removeRules.length > 0) {
+        		for (int i = 0; i < removeRules.length; i++) {
+        			sb.append(removeRules[i]).append(',');
+        		}
+
+        		args += " -d " + sb.toString();
+        	}
+
+        	sb = new StringBuilder();
+        	if (statRules.length > 0) {
+        		for (int i = 0; i < statRules.length; i++) {
+        			sb.append(statRules[i]).append(',');
+        		}
+
+        		args += " -s " + sb.toString();
+        	}
+
+        	String result = routerProxy("vpc_loadbalancer.sh", routerIp, args);
+
+        	if (result != null) {
+        		return new Answer(cmd, false, "LoadBalancerConfigCommand failed");
+        	}
+        	return new Answer(cmd);
+
+        } catch (Exception e) {
+        	return new Answer(cmd, e);
+        }
+    }
 
     private Answer execute(LoadBalancerConfigCommand cmd) {
+        if ( cmd.getVpcId() != null ) {
+            return VPCLoadBalancerConfig(cmd);
+        }
+        
         String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
         File tmpCfgFile = null;
         try {
@@ -520,7 +590,7 @@ public class VirtualRoutingResource implements Manager {
         }
         
         final String result = routerProxy("checkbatchs2svpn.sh", routerIP, args);
-        if (result == null || result.isEmpty()) {
+        if (result != null) {
             return new CheckS2SVpnConnectionsAnswer(cmd, false, "CheckS2SVpnConneciontsCommand failed");
         }
         return new CheckS2SVpnConnectionsAnswer(cmd, true, result);