From d8ab3e1c36b39c2fc3cddeeb171d642c02dc305a Mon Sep 17 00:00:00 2001 From: anthony Date: Thu, 2 Aug 2012 18:47:38 -0700 Subject: [PATCH] VPC : handle Revoke rules for staticroute --- .../api/routing/SetStaticRouteCommand.java | 21 ++++----- .../vmware/resource/VmwareResource.java | 5 -- .../xen/resource/CitrixResourceBase.java | 46 ++++++++----------- .../config/opt/cloud/bin/vpc_staticroute.sh | 4 +- 4 files changed, 30 insertions(+), 46 deletions(-) diff --git a/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java b/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java index cc25e85a88a..f0fa8c2f48a 100644 --- a/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java +++ b/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java @@ -37,25 +37,22 @@ 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(); for (StaticRouteProfile route: staticRoutes) { /* example : ip:gateway:cidr, */ - if( route.getState() == StaticRoute.State.Active || route.getState() == StaticRoute.State.Add ) { - String cidr = route.getCidr(); - String subnet = NetUtils.getCidrSubNet(cidr); - String cidrSize = cidr.split("\\/")[1]; - String entry = route.getIp4Address()+ ":" + route.getGateway() + ":" + subnet + "/" + cidrSize; - toAdd.add(entry); + String cidr = route.getCidr(); + String subnet = NetUtils.getCidrSubNet(cidr); + String cidrSize = cidr.split("\\/")[1]; + String entry; + if (route.getState() == StaticRoute.State.Active || route.getState() == StaticRoute.State.Add) { + entry = route.getIp4Address() + ":" + route.getGateway() + ":" + subnet + "/" + cidrSize; + } else { + entry = "Revoke:" + route.getGateway() + ":" + subnet + "/" + cidrSize; } + toAdd.add(entry); } result[0] = toAdd.toArray(new String[toAdd.size()]); return result; diff --git a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 23b0a642233..e2933028164 100755 --- a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -526,11 +526,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String[] results = new String[cmd.getStaticRoutes().length]; int i = 0; - if ( cmd.isEmpty() ) { - s_logger.error("SetStaticRoute failed since incoming command is empty"); - return new SetStaticRouteAnswer(cmd, false, null); - } - // Extract and build the arguments for the command to be sent to the VR. String [][] rules = cmd.generateSRouteRules(); StringBuilder sb = new StringBuilder(); diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 933182804a7..9ba5081981a 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -7521,34 +7521,26 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Connection conn = getConnection(); String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); try { - 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(','); - } - 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); + 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(','); } + 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); } catch (Exception e) { String msg = "SetStaticRoute failed due to " + e.toString(); 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 542c0c6acd7..b75c0fb3580 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_staticroute.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_staticroute.sh @@ -60,11 +60,11 @@ restore_table() { static_route() { local rule=$1 - if [ "$rule" == "none" ] + local ip=$(echo $rule | cut -d: -f1) + if [ $ip == "Revoke" ] 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) logger -t cloud "$(basename $0): static route: public ip=$ip \