CLOUDSTACK-8590 - Refactoring NiciraNVP resource - Adding NiciraNvpCreateLogicalSwitchPortCommandWrapper - Removing unsued field from NiciraNvpResourceTest
Signed-off-by: wilderrodrigues <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/361ab5dd Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/361ab5dd Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/361ab5dd Branch: refs/heads/master Commit: 361ab5ddbd138559423f747b1030608633f2af00 Parents: 28c1da9 Author: wilderrodrigues <[email protected]> Authored: Tue Jun 30 10:22:25 2015 +0200 Committer: wilderrodrigues <[email protected]> Committed: Wed Jul 1 15:04:57 2015 +0200 ---------------------------------------------------------------------- .../network/resource/NiciraNvpResource.java | 31 +-------- .../network/resource/NiciraNvpUtilities.java | 17 +++++ ...vpCreateLogicalSwitchPortCommandWrapper.java | 70 ++++++++++++++++++++ .../network/resource/NiciraNvpResourceTest.java | 2 - 4 files changed, 88 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/361ab5dd/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 1ab1992..85faf9d 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 @@ -38,8 +38,6 @@ import com.cloud.agent.api.ConfigureStaticNatRulesOnLogicalRouterAnswer; import com.cloud.agent.api.ConfigureStaticNatRulesOnLogicalRouterCommand; import com.cloud.agent.api.CreateLogicalRouterAnswer; import com.cloud.agent.api.CreateLogicalRouterCommand; -import com.cloud.agent.api.CreateLogicalSwitchPortAnswer; -import com.cloud.agent.api.CreateLogicalSwitchPortCommand; import com.cloud.agent.api.DeleteLogicalRouterAnswer; import com.cloud.agent.api.DeleteLogicalRouterCommand; import com.cloud.agent.api.DeleteLogicalSwitchPortAnswer; @@ -209,9 +207,7 @@ public class NiciraNvpResource implements ServerResource { // [TODO] Remove when all the commands are refactored. } - if (cmd instanceof CreateLogicalSwitchPortCommand) { - return executeRequest((CreateLogicalSwitchPortCommand)cmd, NUM_RETRIES); - } else if (cmd instanceof DeleteLogicalSwitchPortCommand) { + if (cmd instanceof DeleteLogicalSwitchPortCommand) { return executeRequest((DeleteLogicalSwitchPortCommand)cmd, NUM_RETRIES); } else if (cmd instanceof UpdateLogicalSwitchPortCommand) { return executeRequest((UpdateLogicalSwitchPortCommand)cmd, NUM_RETRIES); @@ -245,31 +241,6 @@ public class NiciraNvpResource implements ServerResource { public void setAgentControl(final IAgentControl agentControl) { } - private Answer executeRequest(final CreateLogicalSwitchPortCommand cmd, final int numRetries) { - final String logicalSwitchUuid = cmd.getLogicalSwitchUuid(); - final String attachmentUuid = cmd.getAttachmentUuid(); - - try { - // Tags set to scope cs_account and account name - final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>(); - tags.add(new NiciraNvpTag("cs_account", cmd.getOwnerName())); - - final LogicalSwitchPort logicalSwitchPort = new LogicalSwitchPort(attachmentUuid, tags, true); - final LogicalSwitchPort newPort = niciraNvpApi.createLogicalSwitchPort(logicalSwitchUuid, logicalSwitchPort); - try { - niciraNvpApi.updateLogicalSwitchPortAttachment(cmd.getLogicalSwitchUuid(), newPort.getUuid(), new VifAttachment(attachmentUuid)); - } catch (final NiciraNvpApiException ex) { - s_logger.warn("modifyLogicalSwitchPort failed after switchport was created, removing switchport"); - niciraNvpApi.deleteLogicalSwitchPort(cmd.getLogicalSwitchUuid(), newPort.getUuid()); - throw ex; // Rethrow the original exception - } - return new CreateLogicalSwitchPortAnswer(cmd, true, "Logical switch port " + newPort.getUuid() + " created", newPort.getUuid()); - } catch (final NiciraNvpApiException e) { - retryUtility.addRetry(cmd, NUM_RETRIES); - return retryUtility.retry(cmd, CreateLogicalSwitchPortAnswer.class, e); - } - } - private Answer executeRequest(final DeleteLogicalSwitchPortCommand cmd, final int numRetries) { try { niciraNvpApi.deleteLogicalSwitchPort(cmd.getLogicalSwitchUuid(), cmd.getLogicalSwitchPortUuid()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/361ab5dd/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpUtilities.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpUtilities.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpUtilities.java index 69cacab..f63ca98 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpUtilities.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpUtilities.java @@ -18,7 +18,13 @@ // package com.cloud.network.resource; +import java.util.ArrayList; +import java.util.List; + +import com.cloud.agent.api.CreateLogicalSwitchPortCommand; import com.cloud.network.nicira.LogicalSwitch; +import com.cloud.network.nicira.LogicalSwitchPort; +import com.cloud.network.nicira.NiciraNvpTag; public class NiciraNvpUtilities { @@ -39,4 +45,15 @@ public class NiciraNvpUtilities { final LogicalSwitch logicalSwitch = new LogicalSwitch(); return logicalSwitch; } + + public LogicalSwitchPort createLogicalSwitchPort(final CreateLogicalSwitchPortCommand command) { + final String attachmentUuid = command.getAttachmentUuid(); + + // Tags set to scope cs_account and account name + final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>(); + tags.add(new NiciraNvpTag("cs_account", command.getOwnerName())); + + final LogicalSwitchPort logicalSwitchPort = new LogicalSwitchPort(attachmentUuid, tags, true); + return logicalSwitchPort; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/361ab5dd/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpCreateLogicalSwitchPortCommandWrapper.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpCreateLogicalSwitchPortCommandWrapper.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpCreateLogicalSwitchPortCommandWrapper.java new file mode 100644 index 0000000..42a4067 --- /dev/null +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpCreateLogicalSwitchPortCommandWrapper.java @@ -0,0 +1,70 @@ +// +// 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.CreateLogicalSwitchPortAnswer; +import com.cloud.agent.api.CreateLogicalSwitchPortCommand; +import com.cloud.network.nicira.LogicalSwitchPort; +import com.cloud.network.nicira.NiciraNvpApi; +import com.cloud.network.nicira.NiciraNvpApiException; +import com.cloud.network.nicira.VifAttachment; +import com.cloud.network.resource.NiciraNvpResource; +import com.cloud.network.resource.NiciraNvpUtilities; +import com.cloud.network.utils.CommandRetryUtility; +import com.cloud.resource.CommandWrapper; +import com.cloud.resource.ResourceWrapper; + +@ResourceWrapper(handles = CreateLogicalSwitchPortCommand.class) +public final class NiciraNvpCreateLogicalSwitchPortCommandWrapper extends CommandWrapper<CreateLogicalSwitchPortCommand, Answer, NiciraNvpResource> { + + private static final Logger s_logger = Logger.getLogger(NiciraNvpCreateLogicalSwitchPortCommandWrapper.class); + + @Override + public Answer execute(final CreateLogicalSwitchPortCommand command, final NiciraNvpResource niciraNvpResource) { + final NiciraNvpUtilities niciraNvpUtilities = niciraNvpResource.getNiciraNvpUtilities(); + + final String logicalSwitchUuid = command.getLogicalSwitchUuid(); + final String attachmentUuid = command.getAttachmentUuid(); + + try { + final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi(); + + final LogicalSwitchPort logicalSwitchPort = niciraNvpUtilities.createLogicalSwitchPort(command); + final LogicalSwitchPort newPort = niciraNvpApi.createLogicalSwitchPort(logicalSwitchUuid, logicalSwitchPort); + try { + niciraNvpApi.updateLogicalSwitchPortAttachment(command.getLogicalSwitchUuid(), newPort.getUuid(), new VifAttachment(attachmentUuid)); + } catch (final NiciraNvpApiException ex) { + s_logger.warn("modifyLogicalSwitchPort failed after switchport was created, removing switchport"); + niciraNvpApi.deleteLogicalSwitchPort(command.getLogicalSwitchUuid(), newPort.getUuid()); + throw ex; // Rethrow the original exception + } + return new CreateLogicalSwitchPortAnswer(command, true, "Logical switch port " + newPort.getUuid() + " created", newPort.getUuid()); + } catch (final NiciraNvpApiException e) { + final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility(); + retryUtility.addRetry(command, NUM_RETRIES); + return retryUtility.retry(command, CreateLogicalSwitchPortAnswer.class, e); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/361ab5dd/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java b/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java index b8b81b2..ccee017 100644 --- a/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java +++ b/plugins/network-elements/nicira-nvp/test/com/cloud/network/resource/NiciraNvpResourceTest.java @@ -92,7 +92,6 @@ public class NiciraNvpResourceTest { NiciraNvpResource resource; Map<String, Object> parameters; - private NiciraNvpUtilities niciraNvpUtilities; private CommandRetryUtility retryUtility; @Before @@ -112,7 +111,6 @@ public class NiciraNvpResourceTest { parameters.put("zoneId", "blublub"); parameters.put("adminpass", "adminpass"); - niciraNvpUtilities = NiciraNvpUtilities.getInstance(); retryUtility = CommandRetryUtility.getInstance(); retryUtility.setServerResource(resource); }
