cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From e...@apache.org
Subject [09/11] git commit: updated refs/heads/master to 96ad6f6
Date Wed, 01 Jul 2015 13:05:26 GMT
CLOUDSTACK-8590 - Refactoring NiciraNVP resource

   - Adding remaining command wrappers

Signed-off-by: wilderrodrigues <wrodrigues@schubergphilis.com>


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

Branch: refs/heads/master
Commit: 644458f5aca17e44381fd7393cefe7da42a56803
Parents: b541269
Author: wilderrodrigues <wrodrigues@schubergphilis.com>
Authored: Tue Jun 30 11:34:29 2015 +0200
Committer: wilderrodrigues <wrodrigues@schubergphilis.com>
Committed: Wed Jul 1 15:04:58 2015 +0200

----------------------------------------------------------------------
 .../network/resource/NiciraNvpResource.java     | 204 +------------------
 ...figurePortForwardingRulesCommandWrapper.java | 120 +++++++++++
 ...ciraNvpConfigurePublicIpsCommandWrapper.java |  60 ++++++
 ...vpConfigureStaticNatRulesCommandWrapper.java | 113 ++++++++++
 ...iraNvpDeleteLogicalRouterCommandWrapper.java |  50 +++++
 5 files changed, 349 insertions(+), 198 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/644458f5/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java
b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java
index 776b512..df40db4 100644
--- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java
@@ -28,29 +28,17 @@ import org.apache.log4j.Logger;
 import com.cloud.agent.IAgentControl;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.Command;
-import com.cloud.agent.api.ConfigurePortForwardingRulesOnLogicalRouterAnswer;
-import com.cloud.agent.api.ConfigurePortForwardingRulesOnLogicalRouterCommand;
-import com.cloud.agent.api.ConfigurePublicIpsOnLogicalRouterAnswer;
-import com.cloud.agent.api.ConfigurePublicIpsOnLogicalRouterCommand;
-import com.cloud.agent.api.ConfigureStaticNatRulesOnLogicalRouterAnswer;
-import com.cloud.agent.api.ConfigureStaticNatRulesOnLogicalRouterCommand;
-import com.cloud.agent.api.DeleteLogicalRouterAnswer;
-import com.cloud.agent.api.DeleteLogicalRouterCommand;
 import com.cloud.agent.api.PingCommand;
 import com.cloud.agent.api.StartupCommand;
 import com.cloud.agent.api.StartupNiciraNvpCommand;
-import com.cloud.agent.api.to.PortForwardingRuleTO;
-import com.cloud.agent.api.to.StaticNatRuleTO;
 import com.cloud.host.Host;
 import com.cloud.host.Host.Type;
 import com.cloud.network.nicira.ControlClusterStatus;
 import com.cloud.network.nicira.DestinationNatRule;
-import com.cloud.network.nicira.LogicalRouterPort;
 import com.cloud.network.nicira.Match;
 import com.cloud.network.nicira.NatRule;
 import com.cloud.network.nicira.NiciraNvpApi;
 import com.cloud.network.nicira.NiciraNvpApiException;
-import com.cloud.network.nicira.NiciraNvpList;
 import com.cloud.network.nicira.SourceNatRule;
 import com.cloud.network.utils.CommandRetryUtility;
 import com.cloud.resource.ServerResource;
@@ -185,21 +173,9 @@ public class NiciraNvpResource implements ServerResource {
         try {
             return wrapper.execute(cmd, this);
         } catch (final Exception e) {
-            //return Answer.createUnsupportedCommandAnswer(cmd);
-            // [TODO] Remove when all the commands are refactored.
+            s_logger.debug("Received unsupported command " + cmd.toString());
+            return Answer.createUnsupportedCommandAnswer(cmd);
         }
-
-        if (cmd instanceof DeleteLogicalRouterCommand) {
-            return executeRequest((DeleteLogicalRouterCommand)cmd, NUM_RETRIES);
-        } else if (cmd instanceof ConfigureStaticNatRulesOnLogicalRouterCommand) {
-            return executeRequest((ConfigureStaticNatRulesOnLogicalRouterCommand)cmd, NUM_RETRIES);
-        } else if (cmd instanceof ConfigurePortForwardingRulesOnLogicalRouterCommand) {
-            return executeRequest((ConfigurePortForwardingRulesOnLogicalRouterCommand)cmd,
NUM_RETRIES);
-        } else if (cmd instanceof ConfigurePublicIpsOnLogicalRouterCommand) {
-            return executeRequest((ConfigurePublicIpsOnLogicalRouterCommand)cmd, NUM_RETRIES);
-        }
-        s_logger.debug("Received unsupported command " + cmd.toString());
-        return Answer.createUnsupportedCommandAnswer(cmd);
     }
 
     @Override
@@ -215,175 +191,7 @@ public class NiciraNvpResource implements ServerResource {
     public void setAgentControl(final IAgentControl agentControl) {
     }
 
-    private Answer executeRequest(final DeleteLogicalRouterCommand cmd, final int numRetries)
{
-        try {
-            niciraNvpApi.deleteLogicalRouter(cmd.getLogicalRouterUuid());
-            return new DeleteLogicalRouterAnswer(cmd, true, "Logical Router deleted (uuid
" + cmd.getLogicalRouterUuid() + ")");
-        } catch (final NiciraNvpApiException e) {
-            retryUtility.addRetry(cmd, NUM_RETRIES);
-            return retryUtility.retry(cmd, DeleteLogicalRouterAnswer.class, e);
-        }
-    }
-
-    private Answer executeRequest(final ConfigurePublicIpsOnLogicalRouterCommand cmd, final
int numRetries) {
-        try {
-            final NiciraNvpList<LogicalRouterPort> ports = niciraNvpApi.findLogicalRouterPortByGatewayServiceUuid(cmd.getLogicalRouterUuid(),
cmd.getL3GatewayServiceUuid());
-            if (ports.getResultCount() != 1) {
-                return new ConfigurePublicIpsOnLogicalRouterAnswer(cmd, false, "No logical
router ports found, unable to set ip addresses");
-            }
-            final LogicalRouterPort lrp = ports.getResults().get(0);
-            lrp.setIpAddresses(cmd.getPublicCidrs());
-            niciraNvpApi.updateLogicalRouterPort(cmd.getLogicalRouterUuid(), lrp);
-
-            return new ConfigurePublicIpsOnLogicalRouterAnswer(cmd, true, "Configured " +
cmd.getPublicCidrs().size() + " ip addresses on logical router uuid " +
-                    cmd.getLogicalRouterUuid());
-        } catch (final NiciraNvpApiException e) {
-            retryUtility.addRetry(cmd, NUM_RETRIES);
-            return retryUtility.retry(cmd, ConfigurePublicIpsOnLogicalRouterAnswer.class,
e);
-        }
-    }
-
-    private Answer executeRequest(final ConfigureStaticNatRulesOnLogicalRouterCommand cmd,
final int numRetries) {
-        try {
-            final NiciraNvpList<NatRule> existingRules = niciraNvpApi.findNatRulesByLogicalRouterUuid(cmd.getLogicalRouterUuid());
-            // Rules of the game (also known as assumptions-that-will-make-stuff-break-later-on)
-            // A SourceNat rule with a match other than a /32 cidr is assumed to be the "main"
SourceNat rule
-            // Any other SourceNat rule should have a corresponding DestinationNat rule
-
-            for (final StaticNatRuleTO rule : cmd.getRules()) {
-
-                final NatRule[] rulepair = generateStaticNatRulePair(rule.getDstIp(), rule.getSrcIp());
-
-                NatRule incoming = null;
-                NatRule outgoing = null;
-
-                for (final NatRule storedRule : existingRules.getResults()) {
-                    if (storedRule.equalsIgnoreUuid(rulepair[1])) {
-                        // The outgoing rule exists
-                        outgoing = storedRule;
-                        s_logger.debug("Found matching outgoing rule " + outgoing.getUuid());
-                        if (incoming != null) {
-                            break;
-                        }
-                    } else if (storedRule.equalsIgnoreUuid(rulepair[0])) {
-                        // The incoming rule exists
-                        incoming = storedRule;
-                        s_logger.debug("Found matching incoming rule " + incoming.getUuid());
-                        if (outgoing != null) {
-                            break;
-                        }
-                    }
-                }
-                if (incoming != null && outgoing != null) {
-                    if (rule.revoked()) {
-                        s_logger.debug("Deleting incoming rule " + incoming.getUuid());
-                        niciraNvpApi.deleteLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
incoming.getUuid());
-
-                        s_logger.debug("Deleting outgoing rule " + outgoing.getUuid());
-                        niciraNvpApi.deleteLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
outgoing.getUuid());
-                    }
-                } else {
-                    if (rule.revoked()) {
-                        s_logger.warn("Tried deleting a rule that does not exist, " + rule.getSrcIp()
+ " -> " + rule.getDstIp());
-                        break;
-                    }
-
-                    rulepair[0] = niciraNvpApi.createLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
rulepair[0]);
-                    s_logger.debug("Created " + natRuleToString(rulepair[0]));
-
-                    try {
-                        rulepair[1] = niciraNvpApi.createLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
rulepair[1]);
-                        s_logger.debug("Created " + natRuleToString(rulepair[1]));
-                    } catch (final NiciraNvpApiException ex) {
-                        s_logger.debug("Failed to create SourceNatRule, rolling back DestinationNatRule");
-                        niciraNvpApi.deleteLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
rulepair[0].getUuid());
-                        throw ex; // Rethrow original exception
-                    }
-
-                }
-            }
-            return new ConfigureStaticNatRulesOnLogicalRouterAnswer(cmd, true, cmd.getRules().size()
+ " StaticNat rules applied");
-        } catch (final NiciraNvpApiException e) {
-            retryUtility.addRetry(cmd, NUM_RETRIES);
-            return retryUtility.retry(cmd, ConfigureStaticNatRulesOnLogicalRouterAnswer.class,
e);
-        }
-    }
-
-    private Answer executeRequest(final ConfigurePortForwardingRulesOnLogicalRouterCommand
cmd, final int numRetries) {
-        try {
-            final NiciraNvpList<NatRule> existingRules = niciraNvpApi.findNatRulesByLogicalRouterUuid(cmd.getLogicalRouterUuid());
-            // Rules of the game (also known as assumptions-that-will-make-stuff-break-later-on)
-            // A SourceNat rule with a match other than a /32 cidr is assumed to be the "main"
SourceNat rule
-            // Any other SourceNat rule should have a corresponding DestinationNat rule
-
-            for (final PortForwardingRuleTO rule : cmd.getRules()) {
-                if (rule.isAlreadyAdded() && !rule.revoked()) {
-                    // Don't need to do anything
-                    continue;
-                }
-
-                if (rule.getDstPortRange()[0] != rule.getDstPortRange()[1] || rule.getSrcPortRange()[0]
!= rule.getSrcPortRange()[1]) {
-                    return new ConfigurePortForwardingRulesOnLogicalRouterAnswer(cmd, false,
"Nicira NVP doesn't support port ranges for port forwarding");
-                }
-
-                final NatRule[] rulepair = generatePortForwardingRulePair(rule.getDstIp(),
rule.getDstPortRange(), rule.getSrcIp(), rule.getSrcPortRange(), rule.getProtocol());
-
-                NatRule incoming = null;
-                NatRule outgoing = null;
-
-                for (final NatRule storedRule : existingRules.getResults()) {
-                    if (storedRule.equalsIgnoreUuid(rulepair[1])) {
-                        // The outgoing rule exists
-                        outgoing = storedRule;
-                        s_logger.debug("Found matching outgoing rule " + outgoing.getUuid());
-                        if (incoming != null) {
-                            break;
-                        }
-                    } else if (storedRule.equalsIgnoreUuid(rulepair[0])) {
-                        // The incoming rule exists
-                        incoming = storedRule;
-                        s_logger.debug("Found matching incoming rule " + incoming.getUuid());
-                        if (outgoing != null) {
-                            break;
-                        }
-                    }
-                }
-                if (incoming != null && outgoing != null) {
-                    if (rule.revoked()) {
-                        s_logger.debug("Deleting incoming rule " + incoming.getUuid());
-                        niciraNvpApi.deleteLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
incoming.getUuid());
-
-                        s_logger.debug("Deleting outgoing rule " + outgoing.getUuid());
-                        niciraNvpApi.deleteLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
outgoing.getUuid());
-                    }
-                } else {
-                    if (rule.revoked()) {
-                        s_logger.warn("Tried deleting a rule that does not exist, " + rule.getSrcIp()
+ " -> " + rule.getDstIp());
-                        break;
-                    }
-
-                    rulepair[0] = niciraNvpApi.createLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
rulepair[0]);
-                    s_logger.debug("Created " + natRuleToString(rulepair[0]));
-
-                    try {
-                        rulepair[1] = niciraNvpApi.createLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
rulepair[1]);
-                        s_logger.debug("Created " + natRuleToString(rulepair[1]));
-                    } catch (final NiciraNvpApiException ex) {
-                        s_logger.warn("NiciraNvpApiException during create call, rolling
back previous create");
-                        niciraNvpApi.deleteLogicalRouterNatRule(cmd.getLogicalRouterUuid(),
rulepair[0].getUuid());
-                        throw ex; // Rethrow the original exception
-                    }
-
-                }
-            }
-            return new ConfigurePortForwardingRulesOnLogicalRouterAnswer(cmd, true, cmd.getRules().size()
+ " PortForwarding rules applied");
-        } catch (final NiciraNvpApiException e) {
-            retryUtility.addRetry(cmd, NUM_RETRIES);
-            return retryUtility.retry(cmd, ConfigurePortForwardingRulesOnLogicalRouterAnswer.class,
e);
-        }
-    }
-
-    private String natRuleToString(final NatRule rule) {
+    public String natRuleToString(final NatRule rule) {
 
         final StringBuilder natRuleStr = new StringBuilder();
         natRuleStr.append("Rule ");
@@ -427,7 +235,7 @@ public class NiciraNvpResource implements ServerResource {
         }
     }
 
-    protected NatRule[] generateStaticNatRulePair(final String insideIp, final String outsideIp)
{
+    public NatRule[] generateStaticNatRulePair(final String insideIp, final String outsideIp)
{
         final NatRule[] rulepair = new NatRule[2];
         rulepair[0] = new DestinationNatRule();
         rulepair[0].setType("DestinationNatRule");
@@ -452,7 +260,7 @@ public class NiciraNvpResource implements ServerResource {
 
     }
 
-    protected NatRule[] generatePortForwardingRulePair(final String insideIp, final int[]
insidePorts, final String outsideIp, final int[] outsidePorts,
+    public NatRule[] generatePortForwardingRulePair(final String insideIp, final int[] insidePorts,
final String outsideIp, final int[] outsidePorts,
             final String protocol) {
         // Start with a basic static nat rule, then add port and protocol details
         final NatRule[] rulepair = generateStaticNatRulePair(insideIp, outsideIp);
@@ -508,4 +316,4 @@ public class NiciraNvpResource implements ServerResource {
         // TODO Auto-generated method stub
     }
 
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/644458f5/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigurePortForwardingRulesCommandWrapper.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigurePortForwardingRulesCommandWrapper.java
b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigurePortForwardingRulesCommandWrapper.java
new file mode 100644
index 0000000..89e7a6e
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigurePortForwardingRulesCommandWrapper.java
@@ -0,0 +1,120 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.network.resource.wrapper;
+
+import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.ConfigurePortForwardingRulesOnLogicalRouterAnswer;
+import com.cloud.agent.api.ConfigurePortForwardingRulesOnLogicalRouterCommand;
+import com.cloud.agent.api.to.PortForwardingRuleTO;
+import com.cloud.network.nicira.NatRule;
+import com.cloud.network.nicira.NiciraNvpApi;
+import com.cloud.network.nicira.NiciraNvpApiException;
+import com.cloud.network.nicira.NiciraNvpList;
+import com.cloud.network.resource.NiciraNvpResource;
+import com.cloud.network.utils.CommandRetryUtility;
+import com.cloud.resource.CommandWrapper;
+import com.cloud.resource.ResourceWrapper;
+
+@ResourceWrapper(handles =  ConfigurePortForwardingRulesOnLogicalRouterCommand.class)
+public final class NiciraNvpConfigurePortForwardingRulesCommandWrapper extends CommandWrapper<ConfigurePortForwardingRulesOnLogicalRouterCommand,
Answer, NiciraNvpResource> {
+
+    private static final Logger s_logger = Logger.getLogger(NiciraNvpConfigurePortForwardingRulesCommandWrapper.class);
+
+    @Override
+    public Answer execute(final ConfigurePortForwardingRulesOnLogicalRouterCommand command,
final NiciraNvpResource niciraNvpResource) {
+        final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
+        try {
+            final NiciraNvpList<NatRule> existingRules = niciraNvpApi.findNatRulesByLogicalRouterUuid(command.getLogicalRouterUuid());
+            // Rules of the game (also known as assumptions-that-will-make-stuff-break-later-on)
+            // A SourceNat rule with a match other than a /32 cidr is assumed to be the "main"
SourceNat rule
+            // Any other SourceNat rule should have a corresponding DestinationNat rule
+
+            for (final PortForwardingRuleTO rule : command.getRules()) {
+                if (rule.isAlreadyAdded() && !rule.revoked()) {
+                    // Don't need to do anything
+                    continue;
+                }
+
+                if (rule.getDstPortRange()[0] != rule.getDstPortRange()[1] || rule.getSrcPortRange()[0]
!= rule.getSrcPortRange()[1]) {
+                    return new ConfigurePortForwardingRulesOnLogicalRouterAnswer(command,
false, "Nicira NVP doesn't support port ranges for port forwarding");
+                }
+
+                final NatRule[] rulepair = niciraNvpResource.generatePortForwardingRulePair(rule.getDstIp(),
rule.getDstPortRange(), rule.getSrcIp(), rule.getSrcPortRange(), rule.getProtocol());
+
+                NatRule incoming = null;
+                NatRule outgoing = null;
+
+                for (final NatRule storedRule : existingRules.getResults()) {
+                    if (storedRule.equalsIgnoreUuid(rulepair[1])) {
+                        // The outgoing rule exists
+                        outgoing = storedRule;
+                        s_logger.debug("Found matching outgoing rule " + outgoing.getUuid());
+                        if (incoming != null) {
+                            break;
+                        }
+                    } else if (storedRule.equalsIgnoreUuid(rulepair[0])) {
+                        // The incoming rule exists
+                        incoming = storedRule;
+                        s_logger.debug("Found matching incoming rule " + incoming.getUuid());
+                        if (outgoing != null) {
+                            break;
+                        }
+                    }
+                }
+                if (incoming != null && outgoing != null) {
+                    if (rule.revoked()) {
+                        s_logger.debug("Deleting incoming rule " + incoming.getUuid());
+                        niciraNvpApi.deleteLogicalRouterNatRule(command.getLogicalRouterUuid(),
incoming.getUuid());
+
+                        s_logger.debug("Deleting outgoing rule " + outgoing.getUuid());
+                        niciraNvpApi.deleteLogicalRouterNatRule(command.getLogicalRouterUuid(),
outgoing.getUuid());
+                    }
+                } else {
+                    if (rule.revoked()) {
+                        s_logger.warn("Tried deleting a rule that does not exist, " + rule.getSrcIp()
+ " -> " + rule.getDstIp());
+                        break;
+                    }
+
+                    rulepair[0] = niciraNvpApi.createLogicalRouterNatRule(command.getLogicalRouterUuid(),
rulepair[0]);
+                    s_logger.debug("Created " + niciraNvpResource.natRuleToString(rulepair[0]));
+
+                    try {
+                        rulepair[1] = niciraNvpApi.createLogicalRouterNatRule(command.getLogicalRouterUuid(),
rulepair[1]);
+                        s_logger.debug("Created " + niciraNvpResource.natRuleToString(rulepair[1]));
+                    } catch (final NiciraNvpApiException ex) {
+                        s_logger.warn("NiciraNvpApiException during create call, rolling
back previous create");
+                        niciraNvpApi.deleteLogicalRouterNatRule(command.getLogicalRouterUuid(),
rulepair[0].getUuid());
+                        throw ex; // Rethrow the original exception
+                    }
+
+                }
+            }
+            return new ConfigurePortForwardingRulesOnLogicalRouterAnswer(command, true, command.getRules().size()
+ " PortForwarding rules applied");
+        } catch (final NiciraNvpApiException e) {
+            final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility();
+            retryUtility.addRetry(command, NUM_RETRIES);
+            return retryUtility.retry(command, ConfigurePortForwardingRulesOnLogicalRouterAnswer.class,
e);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/644458f5/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigurePublicIpsCommandWrapper.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigurePublicIpsCommandWrapper.java
b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigurePublicIpsCommandWrapper.java
new file mode 100644
index 0000000..e5d2dcd
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigurePublicIpsCommandWrapper.java
@@ -0,0 +1,60 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.network.resource.wrapper;
+
+import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.ConfigurePublicIpsOnLogicalRouterAnswer;
+import com.cloud.agent.api.ConfigurePublicIpsOnLogicalRouterCommand;
+import com.cloud.network.nicira.LogicalRouterPort;
+import com.cloud.network.nicira.NiciraNvpApi;
+import com.cloud.network.nicira.NiciraNvpApiException;
+import com.cloud.network.nicira.NiciraNvpList;
+import com.cloud.network.resource.NiciraNvpResource;
+import com.cloud.network.utils.CommandRetryUtility;
+import com.cloud.resource.CommandWrapper;
+import com.cloud.resource.ResourceWrapper;
+
+@ResourceWrapper(handles =  ConfigurePublicIpsOnLogicalRouterCommand.class)
+public final class NiciraNvpConfigurePublicIpsCommandWrapper extends CommandWrapper<ConfigurePublicIpsOnLogicalRouterCommand,
Answer, NiciraNvpResource> {
+
+    @Override
+    public Answer execute(final ConfigurePublicIpsOnLogicalRouterCommand command, final NiciraNvpResource
niciraNvpResource) {
+        final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
+
+        try {
+            final NiciraNvpList<LogicalRouterPort> ports = niciraNvpApi.findLogicalRouterPortByGatewayServiceUuid(command.getLogicalRouterUuid(),
command.getL3GatewayServiceUuid());
+            if (ports.getResultCount() != 1) {
+                return new ConfigurePublicIpsOnLogicalRouterAnswer(command, false, "No logical
router ports found, unable to set ip addresses");
+            }
+            final LogicalRouterPort lrp = ports.getResults().get(0);
+            lrp.setIpAddresses(command.getPublicCidrs());
+            niciraNvpApi.updateLogicalRouterPort(command.getLogicalRouterUuid(), lrp);
+
+            return new ConfigurePublicIpsOnLogicalRouterAnswer(command, true, "Configured
" + command.getPublicCidrs().size() + " ip addresses on logical router uuid " +
+                    command.getLogicalRouterUuid());
+        } catch (final NiciraNvpApiException e) {
+            final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility();
+            retryUtility.addRetry(command, NUM_RETRIES);
+            return retryUtility.retry(command, ConfigurePublicIpsOnLogicalRouterAnswer.class,
e);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/644458f5/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigureStaticNatRulesCommandWrapper.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigureStaticNatRulesCommandWrapper.java
b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigureStaticNatRulesCommandWrapper.java
new file mode 100644
index 0000000..1ce3ceb
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpConfigureStaticNatRulesCommandWrapper.java
@@ -0,0 +1,113 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.network.resource.wrapper;
+
+import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.ConfigureStaticNatRulesOnLogicalRouterAnswer;
+import com.cloud.agent.api.ConfigureStaticNatRulesOnLogicalRouterCommand;
+import com.cloud.agent.api.to.StaticNatRuleTO;
+import com.cloud.network.nicira.NatRule;
+import com.cloud.network.nicira.NiciraNvpApi;
+import com.cloud.network.nicira.NiciraNvpApiException;
+import com.cloud.network.nicira.NiciraNvpList;
+import com.cloud.network.resource.NiciraNvpResource;
+import com.cloud.network.utils.CommandRetryUtility;
+import com.cloud.resource.CommandWrapper;
+import com.cloud.resource.ResourceWrapper;
+
+@ResourceWrapper(handles =  ConfigureStaticNatRulesOnLogicalRouterCommand.class)
+public final class NiciraNvpConfigureStaticNatRulesCommandWrapper extends CommandWrapper<ConfigureStaticNatRulesOnLogicalRouterCommand,
Answer, NiciraNvpResource> {
+
+    private static final Logger s_logger = Logger.getLogger(NiciraNvpConfigureStaticNatRulesCommandWrapper.class);
+
+    @Override
+    public Answer execute(final ConfigureStaticNatRulesOnLogicalRouterCommand command, final
NiciraNvpResource niciraNvpResource) {
+        final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
+
+        try {
+            final NiciraNvpList<NatRule> existingRules = niciraNvpApi.findNatRulesByLogicalRouterUuid(command.getLogicalRouterUuid());
+            // Rules of the game (also known as assumptions-that-will-make-stuff-break-later-on)
+            // A SourceNat rule with a match other than a /32 cidr is assumed to be the "main"
SourceNat rule
+            // Any other SourceNat rule should have a corresponding DestinationNat rule
+
+            for (final StaticNatRuleTO rule : command.getRules()) {
+
+                final NatRule[] rulepair = niciraNvpResource.generateStaticNatRulePair(rule.getDstIp(),
rule.getSrcIp());
+
+                NatRule incoming = null;
+                NatRule outgoing = null;
+
+                for (final NatRule storedRule : existingRules.getResults()) {
+                    if (storedRule.equalsIgnoreUuid(rulepair[1])) {
+                        // The outgoing rule exists
+                        outgoing = storedRule;
+                        s_logger.debug("Found matching outgoing rule " + outgoing.getUuid());
+                        if (incoming != null) {
+                            break;
+                        }
+                    } else if (storedRule.equalsIgnoreUuid(rulepair[0])) {
+                        // The incoming rule exists
+                        incoming = storedRule;
+                        s_logger.debug("Found matching incoming rule " + incoming.getUuid());
+                        if (outgoing != null) {
+                            break;
+                        }
+                    }
+                }
+                if (incoming != null && outgoing != null) {
+                    if (rule.revoked()) {
+                        s_logger.debug("Deleting incoming rule " + incoming.getUuid());
+                        niciraNvpApi.deleteLogicalRouterNatRule(command.getLogicalRouterUuid(),
incoming.getUuid());
+
+                        s_logger.debug("Deleting outgoing rule " + outgoing.getUuid());
+                        niciraNvpApi.deleteLogicalRouterNatRule(command.getLogicalRouterUuid(),
outgoing.getUuid());
+                    }
+                } else {
+                    if (rule.revoked()) {
+                        s_logger.warn("Tried deleting a rule that does not exist, " + rule.getSrcIp()
+ " -> " + rule.getDstIp());
+                        break;
+                    }
+
+                    rulepair[0] = niciraNvpApi.createLogicalRouterNatRule(command.getLogicalRouterUuid(),
rulepair[0]);
+                    s_logger.debug("Created " + niciraNvpResource.natRuleToString(rulepair[0]));
+
+                    try {
+                        rulepair[1] = niciraNvpApi.createLogicalRouterNatRule(command.getLogicalRouterUuid(),
rulepair[1]);
+                        s_logger.debug("Created " + niciraNvpResource.natRuleToString(rulepair[1]));
+                    } catch (final NiciraNvpApiException ex) {
+                        s_logger.debug("Failed to create SourceNatRule, rolling back DestinationNatRule");
+                        niciraNvpApi.deleteLogicalRouterNatRule(command.getLogicalRouterUuid(),
rulepair[0].getUuid());
+                        throw ex; // Rethrow original exception
+                    }
+
+                }
+            }
+            return new ConfigureStaticNatRulesOnLogicalRouterAnswer(command, true, command.getRules().size()
+ " StaticNat rules applied");
+        } catch (final NiciraNvpApiException e) {
+            final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility();
+            retryUtility.addRetry(command, NUM_RETRIES);
+            return retryUtility.retry(command, ConfigureStaticNatRulesOnLogicalRouterAnswer.class,
e);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/644458f5/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalRouterCommandWrapper.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalRouterCommandWrapper.java
b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalRouterCommandWrapper.java
new file mode 100644
index 0000000..43665b2
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalRouterCommandWrapper.java
@@ -0,0 +1,50 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.network.resource.wrapper;
+
+import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.DeleteLogicalRouterAnswer;
+import com.cloud.agent.api.DeleteLogicalRouterCommand;
+import com.cloud.network.nicira.NiciraNvpApi;
+import com.cloud.network.nicira.NiciraNvpApiException;
+import com.cloud.network.resource.NiciraNvpResource;
+import com.cloud.network.utils.CommandRetryUtility;
+import com.cloud.resource.CommandWrapper;
+import com.cloud.resource.ResourceWrapper;
+
+@ResourceWrapper(handles =  DeleteLogicalRouterCommand.class)
+public final class NiciraNvpDeleteLogicalRouterCommandWrapper extends CommandWrapper<DeleteLogicalRouterCommand,
Answer, NiciraNvpResource> {
+
+    @Override
+    public Answer execute(final DeleteLogicalRouterCommand command, final NiciraNvpResource
niciraNvpResource) {
+        final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
+
+        try {
+            niciraNvpApi.deleteLogicalRouter(command.getLogicalRouterUuid());
+            return new DeleteLogicalRouterAnswer(command, true, "Logical Router deleted (uuid
" + command.getLogicalRouterUuid() + ")");
+        } catch (final NiciraNvpApiException e) {
+            final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility();
+            retryUtility.addRetry(command, NUM_RETRIES);
+            return retryUtility.retry(command, DeleteLogicalRouterAnswer.class, e);
+        }
+    }
+}
\ No newline at end of file


Mime
View raw message