From 5d224ed59297d8462bd507df54a946c1dd70b790 Mon Sep 17 00:00:00 2001 From: anthony Date: Tue, 10 Jul 2012 18:40:06 -0700 Subject: [PATCH] VPC : in no route in setStaticRoute, just remove all routes --- .../api/routing/SetStaticRouteCommand.java | 6 +++ .../xen/resource/CitrixResourceBase.java | 45 ++++++++++++------- .../config/opt/cloud/bin/vpc_staticroute.sh | 4 ++ 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java b/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java index 561ab37a3fa..d096399ddbd 100644 --- a/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java +++ b/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java @@ -36,6 +36,12 @@ public class SetStaticRouteCommand extends NetworkElementCommand{ return staticRoutes; } + public boolean isEmpty() { + if(staticRoutes == null || staticRoutes.length == 0 ) { + return true; + } + return false; + } public String[][] generateSRouteRules() { String [][] result = new String [2][]; Set toAdd = new HashSet(); diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 287c30a5c3e..2dc8c1b89bb 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -7477,32 +7477,43 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe private SetStaticRouteAnswer execute(SetStaticRouteCommand cmd) { - String[] results = new String[cmd.getStaticRoutes().length]; String callResult; Connection conn = getConnection(); String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); try { - 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 = "vpc_staticroute.sh " + routerIp; - args += " -a " + sb.toString(); - callResult = callHostPlugin(conn, "vmops", "routerProxy", "args", args); - if (callResult == null || callResult.isEmpty()) { - //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++) { - results[i] = "Failed"; + if ( !cmd.isEmpty() ) { + String[] results = new String[cmd.getStaticRoutes().length]; + 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(','); } - return new SetStaticRouteAnswer(cmd, false, results); + String args = "vpc_staticroute.sh " + routerIp; + args += " -a " + sb.toString(); + callResult = callHostPlugin(conn, "vmops", "routerProxy", "args", args); + if (callResult == null || callResult.isEmpty()) { + //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++) { + results[i] = "Failed"; + } + return new SetStaticRouteAnswer(cmd, false, results); + } + return new SetStaticRouteAnswer(cmd, true, results); + } else { + String args = "vpc_staticroute.sh " + routerIp; + args += " -a none"; + callResult = callHostPlugin(conn, "vmops", "routerProxy", "args", args); + if (callResult == null || callResult.isEmpty()) { + return new SetStaticRouteAnswer(cmd, false, null); + } + return new SetStaticRouteAnswer(cmd, true, null); } - 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, results); + return new SetStaticRouteAnswer(cmd, false, null); } } } diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_staticroute.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_staticroute.sh index 9f356923ea6..542c0c6acd7 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_staticroute.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_staticroute.sh @@ -60,6 +60,10 @@ restore_table() { static_route() { local rule=$1 + if [ "$rule" == "none" ] + then + return 0 + fi local ip=$(echo $rule | cut -d: -f1) local gateway=$(echo $rule | cut -d: -f2) local cidr=$(echo $rule | cut -d: -f3)