You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ja...@apache.org on 2013/07/25 14:20:49 UTC
git commit: updated refs/heads/4.2 to 34f75b0
Updated Branches:
refs/heads/4.2 f062fd4fc -> 34f75b0a5
CLOUDSTACK-2933 Added vpc load balancing changes for vmware
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/34f75b0a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/34f75b0a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/34f75b0a
Branch: refs/heads/4.2
Commit: 34f75b0a5d020f8f21d8b53c39d3d584efda047c
Parents: f062fd4
Author: Jayapal <ja...@apache.org>
Authored: Thu Jul 25 17:39:43 2013 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Thu Jul 25 17:40:21 2013 +0530
----------------------------------------------------------------------
.../vmware/resource/VmwareResource.java | 90 ++++++++++++++++++++
1 file changed, 90 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/34f75b0a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index 8a9e999..8a43182 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -1009,7 +1009,97 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
return new SetStaticNatRulesAnswer(cmd, results, endResult);
}
+ protected Answer VPCLoadBalancerConfig(final LoadBalancerConfigCommand cmd) {
+ VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
+ File keyFile = mgr.getSystemVMKeyFile();
+
+ String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
+ String controlIp = getRouterSshControlIp(cmd);
+
+ assert(controlIp != null);
+
+ LoadBalancerConfigurator cfgtr = new HAProxyConfigurator();
+ String[] config = cfgtr.generateConfiguration(cmd);
+
+ String tmpCfgFilePath = "/etc/haproxy/haproxy.cfg.new";
+ String tmpCfgFileContents = "";
+ for (int i = 0; i < config.length; i++) {
+ tmpCfgFileContents += config[i];
+ tmpCfgFileContents += "\n";
+ }
+
+ try {
+ SshHelper.scpTo(controlIp, DEFAULT_DOMR_SSHPORT, "root", keyFile, null, "/etc/haproxy/", tmpCfgFileContents.getBytes(), "haproxy.cfg.new", null);
+
+ try {
+ String[][] rules = cfgtr.generateFwRules(cmd);
+
+ String[] addRules = rules[LoadBalancerConfigurator.ADD];
+ String[] removeRules = rules[LoadBalancerConfigurator.REMOVE];
+ String[] statRules = rules[LoadBalancerConfigurator.STATS];
+
+ String args = "";
+ String ip = cmd.getNic().getIp();
+ 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();
+ }
+
+ // Invoke the command
+ Pair<Boolean, String> result = SshHelper.sshExecute(controlIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null, "/opt/cloud/bin/vpc_loadbalancer.sh " + args);
+
+ if (!result.first()) {
+ String msg = "LoadBalancerConfigCommand on domain router " + routerIp + " failed. message: " + result.second();
+ s_logger.error(msg);
+
+ return new Answer(cmd, false, msg);
+ }
+
+ if (s_logger.isInfoEnabled()) {
+ s_logger.info("VPCLoadBalancerConfigCommand on domain router " + routerIp + " completed");
+ }
+ } finally {
+ SshHelper.sshExecute(controlIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null, "rm " + tmpCfgFilePath);
+ }
+ return new Answer(cmd);
+ } catch (Throwable e) {
+ s_logger.error("Unexpected exception: " + e.toString(), e);
+ return new Answer(cmd, false, "VPCLoadBalancerConfigCommand failed due to " + VmwareHelper.getExceptionMessage(e));
+ }
+
+
+ }
+
+
protected Answer execute(final LoadBalancerConfigCommand cmd) {
+
+ if ( cmd.getVpcId() != null ) {
+ return VPCLoadBalancerConfig(cmd);
+ }
+
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
File keyFile = mgr.getSystemVMKeyFile();