CLOUDSTACK-8590 - Refactoring NiciraNVP resource - Adding NiciraNvpCreateLogicalRouterCommandWrapper - Adding NiciraNvpDeleteLogicalSwitchPortCommandWrapper - Adding NiciraNvpFindLogicalSwitchPortCommandWrapper - Adding NiciraNvpUpdateLogicalSwitchPortCommandWrapper - Decoupling private methods from NiciraNvpResource
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/b5412691 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b5412691 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b5412691 Branch: refs/heads/master Commit: b54126918b4c4c620e08b0215dce9bd8da8715fd Parents: b4ce81a Author: wilderrodrigues <[email protected]> Authored: Tue Jun 30 11:18:58 2015 +0200 Committer: wilderrodrigues <[email protected]> Committed: Wed Jul 1 15:04:57 2015 +0200 ---------------------------------------------------------------------- .../network/resource/NiciraNvpResource.java | 153 +------------------ ...iraNvpCreateLogicalRouterCommandWrapper.java | 152 ++++++++++++++++++ ...vpDeleteLogicalSwitchPortCommandWrapper.java | 4 - ...aNvpFindLogicalSwitchPortCommandWrapper.java | 59 +++++++ ...vpUpdateLogicalSwitchPortCommandWrapper.java | 63 ++++++++ 5 files changed, 275 insertions(+), 156 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b5412691/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 1fd19ea..776b512 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 @@ -19,8 +19,6 @@ package com.cloud.network.resource; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import javax.naming.ConfigurationException; @@ -36,38 +34,24 @@ 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.CreateLogicalRouterAnswer; -import com.cloud.agent.api.CreateLogicalRouterCommand; import com.cloud.agent.api.DeleteLogicalRouterAnswer; import com.cloud.agent.api.DeleteLogicalRouterCommand; -import com.cloud.agent.api.FindLogicalSwitchPortAnswer; -import com.cloud.agent.api.FindLogicalSwitchPortCommand; import com.cloud.agent.api.PingCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupNiciraNvpCommand; -import com.cloud.agent.api.UpdateLogicalSwitchPortAnswer; -import com.cloud.agent.api.UpdateLogicalSwitchPortCommand; 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.L3GatewayAttachment; -import com.cloud.network.nicira.LogicalRouter; import com.cloud.network.nicira.LogicalRouterPort; -import com.cloud.network.nicira.LogicalSwitchPort; 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.NiciraNvpTag; -import com.cloud.network.nicira.PatchAttachment; -import com.cloud.network.nicira.RouterNextHop; -import com.cloud.network.nicira.SingleDefaultRouteImplicitRoutingConfig; import com.cloud.network.nicira.SourceNatRule; -import com.cloud.network.nicira.VifAttachment; import com.cloud.network.utils.CommandRetryUtility; import com.cloud.resource.ServerResource; @@ -205,13 +189,7 @@ public class NiciraNvpResource implements ServerResource { // [TODO] Remove when all the commands are refactored. } - if (cmd instanceof UpdateLogicalSwitchPortCommand) { - return executeRequest((UpdateLogicalSwitchPortCommand)cmd, NUM_RETRIES); - } else if (cmd instanceof FindLogicalSwitchPortCommand) { - return executeRequest((FindLogicalSwitchPortCommand)cmd, NUM_RETRIES); - } else if (cmd instanceof CreateLogicalRouterCommand) { - return executeRequest((CreateLogicalRouterCommand)cmd, NUM_RETRIES); - } else if (cmd instanceof DeleteLogicalRouterCommand) { + if (cmd instanceof DeleteLogicalRouterCommand) { return executeRequest((DeleteLogicalRouterCommand)cmd, NUM_RETRIES); } else if (cmd instanceof ConfigureStaticNatRulesOnLogicalRouterCommand) { return executeRequest((ConfigureStaticNatRulesOnLogicalRouterCommand)cmd, NUM_RETRIES); @@ -237,135 +215,6 @@ public class NiciraNvpResource implements ServerResource { public void setAgentControl(final IAgentControl agentControl) { } - private Answer executeRequest(final UpdateLogicalSwitchPortCommand cmd, final int numRetries) { - final String logicalSwitchUuid = cmd.getLogicalSwitchUuid(); - final String logicalSwitchPortUuid = cmd.getLogicalSwitchPortUuid(); - 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())); - - niciraNvpApi.updateLogicalSwitchPortAttachment(logicalSwitchUuid, logicalSwitchPortUuid, new VifAttachment(attachmentUuid)); - return new UpdateLogicalSwitchPortAnswer(cmd, true, "Attachment for " + logicalSwitchPortUuid + " updated", logicalSwitchPortUuid); - } catch (final NiciraNvpApiException e) { - retryUtility.addRetry(cmd, NUM_RETRIES); - return retryUtility.retry(cmd, UpdateLogicalSwitchPortAnswer.class, e); - } - } - - private Answer executeRequest(final FindLogicalSwitchPortCommand cmd, final int numRetries) { - final String logicalSwitchUuid = cmd.getLogicalSwitchUuid(); - final String logicalSwitchPortUuid = cmd.getLogicalSwitchPortUuid(); - - try { - final NiciraNvpList<LogicalSwitchPort> ports = niciraNvpApi.findLogicalSwitchPortsByUuid(logicalSwitchUuid, logicalSwitchPortUuid); - if (ports.getResultCount() == 0) { - return new FindLogicalSwitchPortAnswer(cmd, false, "Logical switchport " + logicalSwitchPortUuid + " not found", null); - } else { - return new FindLogicalSwitchPortAnswer(cmd, true, "Logical switchport " + logicalSwitchPortUuid + " found", logicalSwitchPortUuid); - } - } catch (final NiciraNvpApiException e) { - retryUtility.addRetry(cmd, NUM_RETRIES); - return retryUtility.retry(cmd, FindLogicalSwitchPortAnswer.class, e); - } - } - - private Answer executeRequest(final CreateLogicalRouterCommand cmd, final int numRetries) { - final String routerName = cmd.getName(); - final String gatewayServiceUuid = cmd.getGatewayServiceUuid(); - final String logicalSwitchUuid = cmd.getLogicalSwitchUuid(); - - final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>(); - tags.add(new NiciraNvpTag("cs_account", cmd.getOwnerName())); - - final String publicNetworkNextHopIp = cmd.getPublicNextHop(); - final String publicNetworkIpAddress = cmd.getPublicIpCidr(); - final String internalNetworkAddress = cmd.getInternalIpCidr(); - - s_logger.debug("Creating a logical router with external ip " + publicNetworkIpAddress + " and internal ip " + internalNetworkAddress + "on gateway service " + - gatewayServiceUuid); - - try { - // Create the Router - LogicalRouter lrc = new LogicalRouter(); - lrc.setDisplayName(truncate(routerName, NAME_MAX_LEN)); - lrc.setTags(tags); - lrc.setRoutingConfig(new SingleDefaultRouteImplicitRoutingConfig(new RouterNextHop(publicNetworkNextHopIp))); - lrc = niciraNvpApi.createLogicalRouter(lrc); - - // store the switchport for rollback - LogicalSwitchPort lsp = null; - - try { - // Create the outside port for the router - LogicalRouterPort lrpo = new LogicalRouterPort(); - lrpo.setAdminStatusEnabled(true); - lrpo.setDisplayName(truncate(routerName + "-outside-port", NAME_MAX_LEN)); - lrpo.setTags(tags); - final List<String> outsideIpAddresses = new ArrayList<String>(); - outsideIpAddresses.add(publicNetworkIpAddress); - lrpo.setIpAddresses(outsideIpAddresses); - lrpo = niciraNvpApi.createLogicalRouterPort(lrc.getUuid(), lrpo); - - // Attach the outside port to the gateway service on the correct VLAN - final L3GatewayAttachment attachment = new L3GatewayAttachment(gatewayServiceUuid); - if (cmd.getVlanId() != 0) { - attachment.setVlanId(cmd.getVlanId()); - } - niciraNvpApi.updateLogicalRouterPortAttachment(lrc.getUuid(), lrpo.getUuid(), attachment); - - // Create the inside port for the router - LogicalRouterPort lrpi = new LogicalRouterPort(); - lrpi.setAdminStatusEnabled(true); - lrpi.setDisplayName(truncate(routerName + "-inside-port", NAME_MAX_LEN)); - lrpi.setTags(tags); - final List<String> insideIpAddresses = new ArrayList<String>(); - insideIpAddresses.add(internalNetworkAddress); - lrpi.setIpAddresses(insideIpAddresses); - lrpi = niciraNvpApi.createLogicalRouterPort(lrc.getUuid(), lrpi); - - // Create the inside port on the lswitch - lsp = new LogicalSwitchPort(truncate(routerName + "-inside-port", NAME_MAX_LEN), tags, true); - lsp = niciraNvpApi.createLogicalSwitchPort(logicalSwitchUuid, lsp); - - // Attach the inside router port to the lswitch port with a PatchAttachment - niciraNvpApi.updateLogicalRouterPortAttachment(lrc.getUuid(), lrpi.getUuid(), new PatchAttachment(lsp.getUuid())); - - // Attach the inside lswitch port to the router with a PatchAttachment - niciraNvpApi.updateLogicalSwitchPortAttachment(logicalSwitchUuid, lsp.getUuid(), new PatchAttachment(lrpi.getUuid())); - - // Setup the source nat rule - final SourceNatRule snr = new SourceNatRule(); - snr.setToSourceIpAddressMin(publicNetworkIpAddress.split("/")[0]); - snr.setToSourceIpAddressMax(publicNetworkIpAddress.split("/")[0]); - final Match match = new Match(); - match.setSourceIpAddresses(internalNetworkAddress); - snr.setMatch(match); - snr.setOrder(200); - niciraNvpApi.createLogicalRouterNatRule(lrc.getUuid(), snr); - } catch (final NiciraNvpApiException e) { - // We need to destroy the router if we already created it - // this will also take care of any router ports and rules - try { - niciraNvpApi.deleteLogicalRouter(lrc.getUuid()); - if (lsp != null) { - niciraNvpApi.deleteLogicalSwitchPort(logicalSwitchUuid, lsp.getUuid()); - } - } catch (final NiciraNvpApiException ex) { - } - - throw e; - } - - return new CreateLogicalRouterAnswer(cmd, true, "Logical Router created (uuid " + lrc.getUuid() + ")", lrc.getUuid()); - } catch (final NiciraNvpApiException e) { - retryUtility.addRetry(cmd, NUM_RETRIES); - return retryUtility.retry(cmd, CreateLogicalRouterAnswer.class, e); - } - } - private Answer executeRequest(final DeleteLogicalRouterCommand cmd, final int numRetries) { try { niciraNvpApi.deleteLogicalRouter(cmd.getLogicalRouterUuid()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b5412691/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpCreateLogicalRouterCommandWrapper.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpCreateLogicalRouterCommandWrapper.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpCreateLogicalRouterCommandWrapper.java new file mode 100644 index 0000000..1cddf4f --- /dev/null +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpCreateLogicalRouterCommandWrapper.java @@ -0,0 +1,152 @@ +// +// 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.NAME_MAX_LEN; +import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.CreateLogicalRouterAnswer; +import com.cloud.agent.api.CreateLogicalRouterCommand; +import com.cloud.network.nicira.L3GatewayAttachment; +import com.cloud.network.nicira.LogicalRouter; +import com.cloud.network.nicira.LogicalRouterPort; +import com.cloud.network.nicira.LogicalSwitchPort; +import com.cloud.network.nicira.Match; +import com.cloud.network.nicira.NiciraNvpApi; +import com.cloud.network.nicira.NiciraNvpApiException; +import com.cloud.network.nicira.NiciraNvpTag; +import com.cloud.network.nicira.PatchAttachment; +import com.cloud.network.nicira.RouterNextHop; +import com.cloud.network.nicira.SingleDefaultRouteImplicitRoutingConfig; +import com.cloud.network.nicira.SourceNatRule; +import com.cloud.network.resource.NiciraNvpResource; +import com.cloud.network.utils.CommandRetryUtility; +import com.cloud.resource.CommandWrapper; +import com.cloud.resource.ResourceWrapper; + +@ResourceWrapper(handles = CreateLogicalRouterCommand.class) +public final class NiciraNvpCreateLogicalRouterCommandWrapper extends CommandWrapper<CreateLogicalRouterCommand, Answer, NiciraNvpResource> { + + private static final Logger s_logger = Logger.getLogger(NiciraNvpCreateLogicalRouterCommandWrapper.class); + + @Override + public Answer execute(final CreateLogicalRouterCommand command, final NiciraNvpResource niciraNvpResource) { + final String routerName = command.getName(); + final String gatewayServiceUuid = command.getGatewayServiceUuid(); + final String logicalSwitchUuid = command.getLogicalSwitchUuid(); + + final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>(); + tags.add(new NiciraNvpTag("cs_account", command.getOwnerName())); + + final String publicNetworkNextHopIp = command.getPublicNextHop(); + final String publicNetworkIpAddress = command.getPublicIpCidr(); + final String internalNetworkAddress = command.getInternalIpCidr(); + + s_logger.debug("Creating a logical router with external ip " + publicNetworkIpAddress + " and internal ip " + internalNetworkAddress + "on gateway service " + + gatewayServiceUuid); + + final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi(); + + try { + // Create the Router + LogicalRouter lrc = new LogicalRouter(); + lrc.setDisplayName(niciraNvpResource.truncate(routerName, NAME_MAX_LEN)); + lrc.setTags(tags); + lrc.setRoutingConfig(new SingleDefaultRouteImplicitRoutingConfig(new RouterNextHop(publicNetworkNextHopIp))); + lrc = niciraNvpApi.createLogicalRouter(lrc); + + // store the switchport for rollback + LogicalSwitchPort lsp = null; + + try { + // Create the outside port for the router + LogicalRouterPort lrpo = new LogicalRouterPort(); + lrpo.setAdminStatusEnabled(true); + lrpo.setDisplayName(niciraNvpResource.truncate(routerName + "-outside-port", NAME_MAX_LEN)); + lrpo.setTags(tags); + final List<String> outsideIpAddresses = new ArrayList<String>(); + outsideIpAddresses.add(publicNetworkIpAddress); + lrpo.setIpAddresses(outsideIpAddresses); + lrpo = niciraNvpApi.createLogicalRouterPort(lrc.getUuid(), lrpo); + + // Attach the outside port to the gateway service on the correct VLAN + final L3GatewayAttachment attachment = new L3GatewayAttachment(gatewayServiceUuid); + if (command.getVlanId() != 0) { + attachment.setVlanId(command.getVlanId()); + } + niciraNvpApi.updateLogicalRouterPortAttachment(lrc.getUuid(), lrpo.getUuid(), attachment); + + // Create the inside port for the router + LogicalRouterPort lrpi = new LogicalRouterPort(); + lrpi.setAdminStatusEnabled(true); + lrpi.setDisplayName(niciraNvpResource.truncate(routerName + "-inside-port", NAME_MAX_LEN)); + lrpi.setTags(tags); + final List<String> insideIpAddresses = new ArrayList<String>(); + insideIpAddresses.add(internalNetworkAddress); + lrpi.setIpAddresses(insideIpAddresses); + lrpi = niciraNvpApi.createLogicalRouterPort(lrc.getUuid(), lrpi); + + // Create the inside port on the lswitch + lsp = new LogicalSwitchPort(niciraNvpResource.truncate(routerName + "-inside-port", NAME_MAX_LEN), tags, true); + lsp = niciraNvpApi.createLogicalSwitchPort(logicalSwitchUuid, lsp); + + // Attach the inside router port to the lswitch port with a PatchAttachment + niciraNvpApi.updateLogicalRouterPortAttachment(lrc.getUuid(), lrpi.getUuid(), new PatchAttachment(lsp.getUuid())); + + // Attach the inside lswitch port to the router with a PatchAttachment + niciraNvpApi.updateLogicalSwitchPortAttachment(logicalSwitchUuid, lsp.getUuid(), new PatchAttachment(lrpi.getUuid())); + + // Setup the source nat rule + final SourceNatRule snr = new SourceNatRule(); + snr.setToSourceIpAddressMin(publicNetworkIpAddress.split("/")[0]); + snr.setToSourceIpAddressMax(publicNetworkIpAddress.split("/")[0]); + final Match match = new Match(); + match.setSourceIpAddresses(internalNetworkAddress); + snr.setMatch(match); + snr.setOrder(200); + niciraNvpApi.createLogicalRouterNatRule(lrc.getUuid(), snr); + } catch (final NiciraNvpApiException e) { + // We need to destroy the router if we already created it + // this will also take care of any router ports and rules + try { + niciraNvpApi.deleteLogicalRouter(lrc.getUuid()); + if (lsp != null) { + niciraNvpApi.deleteLogicalSwitchPort(logicalSwitchUuid, lsp.getUuid()); + } + } catch (final NiciraNvpApiException ex) { + } + + throw e; + } + + return new CreateLogicalRouterAnswer(command, true, "Logical Router created (uuid " + lrc.getUuid() + ")", lrc.getUuid()); + } catch (final NiciraNvpApiException e) { + final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility(); + retryUtility.addRetry(command, NUM_RETRIES); + return retryUtility.retry(command, CreateLogicalRouterAnswer.class, e); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b5412691/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalSwitchPortCommandWrapper.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalSwitchPortCommandWrapper.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalSwitchPortCommandWrapper.java index 834cccb..b8c69f2 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalSwitchPortCommandWrapper.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalSwitchPortCommandWrapper.java @@ -21,8 +21,6 @@ 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.DeleteLogicalSwitchPortAnswer; import com.cloud.agent.api.DeleteLogicalSwitchPortCommand; @@ -36,8 +34,6 @@ import com.cloud.resource.ResourceWrapper; @ResourceWrapper(handles = DeleteLogicalSwitchPortCommand.class) public final class NiciraNvpDeleteLogicalSwitchPortCommandWrapper extends CommandWrapper<DeleteLogicalSwitchPortCommand, Answer, NiciraNvpResource> { - private static final Logger s_logger = Logger.getLogger(NiciraNvpDeleteLogicalSwitchPortCommandWrapper.class); - @Override public Answer execute(final DeleteLogicalSwitchPortCommand command, final NiciraNvpResource niciraNvpResource) { final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi(); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b5412691/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpFindLogicalSwitchPortCommandWrapper.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpFindLogicalSwitchPortCommandWrapper.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpFindLogicalSwitchPortCommandWrapper.java new file mode 100644 index 0000000..40d58fc --- /dev/null +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpFindLogicalSwitchPortCommandWrapper.java @@ -0,0 +1,59 @@ +// +// 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.FindLogicalSwitchPortAnswer; +import com.cloud.agent.api.FindLogicalSwitchPortCommand; +import com.cloud.network.nicira.LogicalSwitchPort; +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 = FindLogicalSwitchPortCommand.class) +public final class NiciraNvpFindLogicalSwitchPortCommandWrapper extends CommandWrapper<FindLogicalSwitchPortCommand, Answer, NiciraNvpResource> { + + @Override + public Answer execute(final FindLogicalSwitchPortCommand command, final NiciraNvpResource niciraNvpResource) { + final String logicalSwitchUuid = command.getLogicalSwitchUuid(); + final String logicalSwitchPortUuid = command.getLogicalSwitchPortUuid(); + + final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi(); + + try { + final NiciraNvpList<LogicalSwitchPort> ports = niciraNvpApi.findLogicalSwitchPortsByUuid(logicalSwitchUuid, logicalSwitchPortUuid); + if (ports.getResultCount() == 0) { + return new FindLogicalSwitchPortAnswer(command, false, "Logical switchport " + logicalSwitchPortUuid + " not found", null); + } else { + return new FindLogicalSwitchPortAnswer(command, true, "Logical switchport " + logicalSwitchPortUuid + " found", logicalSwitchPortUuid); + } + } catch (final NiciraNvpApiException e) { + final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility(); + retryUtility.addRetry(command, NUM_RETRIES); + return retryUtility.retry(command, FindLogicalSwitchPortAnswer.class, e); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b5412691/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpUpdateLogicalSwitchPortCommandWrapper.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpUpdateLogicalSwitchPortCommandWrapper.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpUpdateLogicalSwitchPortCommandWrapper.java new file mode 100644 index 0000000..9f65938 --- /dev/null +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpUpdateLogicalSwitchPortCommandWrapper.java @@ -0,0 +1,63 @@ +// +// 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 java.util.ArrayList; +import java.util.List; + +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.UpdateLogicalSwitchPortAnswer; +import com.cloud.agent.api.UpdateLogicalSwitchPortCommand; +import com.cloud.network.nicira.NiciraNvpApi; +import com.cloud.network.nicira.NiciraNvpApiException; +import com.cloud.network.nicira.NiciraNvpTag; +import com.cloud.network.nicira.VifAttachment; +import com.cloud.network.resource.NiciraNvpResource; +import com.cloud.network.utils.CommandRetryUtility; +import com.cloud.resource.CommandWrapper; +import com.cloud.resource.ResourceWrapper; + +@ResourceWrapper(handles = UpdateLogicalSwitchPortCommand.class) +public final class NiciraNvpUpdateLogicalSwitchPortCommandWrapper extends CommandWrapper<UpdateLogicalSwitchPortCommand, Answer, NiciraNvpResource> { + + @Override + public Answer execute(final UpdateLogicalSwitchPortCommand command, final NiciraNvpResource niciraNvpResource) { + final String logicalSwitchUuid = command.getLogicalSwitchUuid(); + final String logicalSwitchPortUuid = command.getLogicalSwitchPortUuid(); + final String attachmentUuid = command.getAttachmentUuid(); + + final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi(); + + try { + // Tags set to scope cs_account and account name + final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>(); + tags.add(new NiciraNvpTag("cs_account", command.getOwnerName())); + + niciraNvpApi.updateLogicalSwitchPortAttachment(logicalSwitchUuid, logicalSwitchPortUuid, new VifAttachment(attachmentUuid)); + return new UpdateLogicalSwitchPortAnswer(command, true, "Attachment for " + logicalSwitchPortUuid + " updated", logicalSwitchPortUuid); + } catch (final NiciraNvpApiException e) { + final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility(); + retryUtility.addRetry(command, NUM_RETRIES); + return retryUtility.retry(command, UpdateLogicalSwitchPortAnswer.class, e); + } + } +} \ No newline at end of file
