Skip to content

Commit b541269

Browse files
CLOUDSTACK-8590 - Refactoring NiciraNVP resource
- Adding NiciraNvpCreateLogicalRouterCommandWrapper - Adding NiciraNvpDeleteLogicalSwitchPortCommandWrapper - Adding NiciraNvpFindLogicalSwitchPortCommandWrapper - Adding NiciraNvpUpdateLogicalSwitchPortCommandWrapper - Decoupling private methods from NiciraNvpResource Signed-off-by: wilderrodrigues <wrodrigues@schubergphilis.com>
1 parent b4ce81a commit b541269

5 files changed

Lines changed: 275 additions & 156 deletions

File tree

plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java

Lines changed: 1 addition & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919

2020
package com.cloud.network.resource;
2121

22-
import java.util.ArrayList;
23-
import java.util.List;
2422
import java.util.Map;
2523

2624
import javax.naming.ConfigurationException;
@@ -36,38 +34,24 @@
3634
import com.cloud.agent.api.ConfigurePublicIpsOnLogicalRouterCommand;
3735
import com.cloud.agent.api.ConfigureStaticNatRulesOnLogicalRouterAnswer;
3836
import com.cloud.agent.api.ConfigureStaticNatRulesOnLogicalRouterCommand;
39-
import com.cloud.agent.api.CreateLogicalRouterAnswer;
40-
import com.cloud.agent.api.CreateLogicalRouterCommand;
4137
import com.cloud.agent.api.DeleteLogicalRouterAnswer;
4238
import com.cloud.agent.api.DeleteLogicalRouterCommand;
43-
import com.cloud.agent.api.FindLogicalSwitchPortAnswer;
44-
import com.cloud.agent.api.FindLogicalSwitchPortCommand;
4539
import com.cloud.agent.api.PingCommand;
4640
import com.cloud.agent.api.StartupCommand;
4741
import com.cloud.agent.api.StartupNiciraNvpCommand;
48-
import com.cloud.agent.api.UpdateLogicalSwitchPortAnswer;
49-
import com.cloud.agent.api.UpdateLogicalSwitchPortCommand;
5042
import com.cloud.agent.api.to.PortForwardingRuleTO;
5143
import com.cloud.agent.api.to.StaticNatRuleTO;
5244
import com.cloud.host.Host;
5345
import com.cloud.host.Host.Type;
5446
import com.cloud.network.nicira.ControlClusterStatus;
5547
import com.cloud.network.nicira.DestinationNatRule;
56-
import com.cloud.network.nicira.L3GatewayAttachment;
57-
import com.cloud.network.nicira.LogicalRouter;
5848
import com.cloud.network.nicira.LogicalRouterPort;
59-
import com.cloud.network.nicira.LogicalSwitchPort;
6049
import com.cloud.network.nicira.Match;
6150
import com.cloud.network.nicira.NatRule;
6251
import com.cloud.network.nicira.NiciraNvpApi;
6352
import com.cloud.network.nicira.NiciraNvpApiException;
6453
import com.cloud.network.nicira.NiciraNvpList;
65-
import com.cloud.network.nicira.NiciraNvpTag;
66-
import com.cloud.network.nicira.PatchAttachment;
67-
import com.cloud.network.nicira.RouterNextHop;
68-
import com.cloud.network.nicira.SingleDefaultRouteImplicitRoutingConfig;
6954
import com.cloud.network.nicira.SourceNatRule;
70-
import com.cloud.network.nicira.VifAttachment;
7155
import com.cloud.network.utils.CommandRetryUtility;
7256
import com.cloud.resource.ServerResource;
7357

@@ -205,13 +189,7 @@ public Answer executeRequest(final Command cmd) {
205189
// [TODO] Remove when all the commands are refactored.
206190
}
207191

208-
if (cmd instanceof UpdateLogicalSwitchPortCommand) {
209-
return executeRequest((UpdateLogicalSwitchPortCommand)cmd, NUM_RETRIES);
210-
} else if (cmd instanceof FindLogicalSwitchPortCommand) {
211-
return executeRequest((FindLogicalSwitchPortCommand)cmd, NUM_RETRIES);
212-
} else if (cmd instanceof CreateLogicalRouterCommand) {
213-
return executeRequest((CreateLogicalRouterCommand)cmd, NUM_RETRIES);
214-
} else if (cmd instanceof DeleteLogicalRouterCommand) {
192+
if (cmd instanceof DeleteLogicalRouterCommand) {
215193
return executeRequest((DeleteLogicalRouterCommand)cmd, NUM_RETRIES);
216194
} else if (cmd instanceof ConfigureStaticNatRulesOnLogicalRouterCommand) {
217195
return executeRequest((ConfigureStaticNatRulesOnLogicalRouterCommand)cmd, NUM_RETRIES);
@@ -237,135 +215,6 @@ public IAgentControl getAgentControl() {
237215
public void setAgentControl(final IAgentControl agentControl) {
238216
}
239217

240-
private Answer executeRequest(final UpdateLogicalSwitchPortCommand cmd, final int numRetries) {
241-
final String logicalSwitchUuid = cmd.getLogicalSwitchUuid();
242-
final String logicalSwitchPortUuid = cmd.getLogicalSwitchPortUuid();
243-
final String attachmentUuid = cmd.getAttachmentUuid();
244-
245-
try {
246-
// Tags set to scope cs_account and account name
247-
final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>();
248-
tags.add(new NiciraNvpTag("cs_account", cmd.getOwnerName()));
249-
250-
niciraNvpApi.updateLogicalSwitchPortAttachment(logicalSwitchUuid, logicalSwitchPortUuid, new VifAttachment(attachmentUuid));
251-
return new UpdateLogicalSwitchPortAnswer(cmd, true, "Attachment for " + logicalSwitchPortUuid + " updated", logicalSwitchPortUuid);
252-
} catch (final NiciraNvpApiException e) {
253-
retryUtility.addRetry(cmd, NUM_RETRIES);
254-
return retryUtility.retry(cmd, UpdateLogicalSwitchPortAnswer.class, e);
255-
}
256-
}
257-
258-
private Answer executeRequest(final FindLogicalSwitchPortCommand cmd, final int numRetries) {
259-
final String logicalSwitchUuid = cmd.getLogicalSwitchUuid();
260-
final String logicalSwitchPortUuid = cmd.getLogicalSwitchPortUuid();
261-
262-
try {
263-
final NiciraNvpList<LogicalSwitchPort> ports = niciraNvpApi.findLogicalSwitchPortsByUuid(logicalSwitchUuid, logicalSwitchPortUuid);
264-
if (ports.getResultCount() == 0) {
265-
return new FindLogicalSwitchPortAnswer(cmd, false, "Logical switchport " + logicalSwitchPortUuid + " not found", null);
266-
} else {
267-
return new FindLogicalSwitchPortAnswer(cmd, true, "Logical switchport " + logicalSwitchPortUuid + " found", logicalSwitchPortUuid);
268-
}
269-
} catch (final NiciraNvpApiException e) {
270-
retryUtility.addRetry(cmd, NUM_RETRIES);
271-
return retryUtility.retry(cmd, FindLogicalSwitchPortAnswer.class, e);
272-
}
273-
}
274-
275-
private Answer executeRequest(final CreateLogicalRouterCommand cmd, final int numRetries) {
276-
final String routerName = cmd.getName();
277-
final String gatewayServiceUuid = cmd.getGatewayServiceUuid();
278-
final String logicalSwitchUuid = cmd.getLogicalSwitchUuid();
279-
280-
final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>();
281-
tags.add(new NiciraNvpTag("cs_account", cmd.getOwnerName()));
282-
283-
final String publicNetworkNextHopIp = cmd.getPublicNextHop();
284-
final String publicNetworkIpAddress = cmd.getPublicIpCidr();
285-
final String internalNetworkAddress = cmd.getInternalIpCidr();
286-
287-
s_logger.debug("Creating a logical router with external ip " + publicNetworkIpAddress + " and internal ip " + internalNetworkAddress + "on gateway service " +
288-
gatewayServiceUuid);
289-
290-
try {
291-
// Create the Router
292-
LogicalRouter lrc = new LogicalRouter();
293-
lrc.setDisplayName(truncate(routerName, NAME_MAX_LEN));
294-
lrc.setTags(tags);
295-
lrc.setRoutingConfig(new SingleDefaultRouteImplicitRoutingConfig(new RouterNextHop(publicNetworkNextHopIp)));
296-
lrc = niciraNvpApi.createLogicalRouter(lrc);
297-
298-
// store the switchport for rollback
299-
LogicalSwitchPort lsp = null;
300-
301-
try {
302-
// Create the outside port for the router
303-
LogicalRouterPort lrpo = new LogicalRouterPort();
304-
lrpo.setAdminStatusEnabled(true);
305-
lrpo.setDisplayName(truncate(routerName + "-outside-port", NAME_MAX_LEN));
306-
lrpo.setTags(tags);
307-
final List<String> outsideIpAddresses = new ArrayList<String>();
308-
outsideIpAddresses.add(publicNetworkIpAddress);
309-
lrpo.setIpAddresses(outsideIpAddresses);
310-
lrpo = niciraNvpApi.createLogicalRouterPort(lrc.getUuid(), lrpo);
311-
312-
// Attach the outside port to the gateway service on the correct VLAN
313-
final L3GatewayAttachment attachment = new L3GatewayAttachment(gatewayServiceUuid);
314-
if (cmd.getVlanId() != 0) {
315-
attachment.setVlanId(cmd.getVlanId());
316-
}
317-
niciraNvpApi.updateLogicalRouterPortAttachment(lrc.getUuid(), lrpo.getUuid(), attachment);
318-
319-
// Create the inside port for the router
320-
LogicalRouterPort lrpi = new LogicalRouterPort();
321-
lrpi.setAdminStatusEnabled(true);
322-
lrpi.setDisplayName(truncate(routerName + "-inside-port", NAME_MAX_LEN));
323-
lrpi.setTags(tags);
324-
final List<String> insideIpAddresses = new ArrayList<String>();
325-
insideIpAddresses.add(internalNetworkAddress);
326-
lrpi.setIpAddresses(insideIpAddresses);
327-
lrpi = niciraNvpApi.createLogicalRouterPort(lrc.getUuid(), lrpi);
328-
329-
// Create the inside port on the lswitch
330-
lsp = new LogicalSwitchPort(truncate(routerName + "-inside-port", NAME_MAX_LEN), tags, true);
331-
lsp = niciraNvpApi.createLogicalSwitchPort(logicalSwitchUuid, lsp);
332-
333-
// Attach the inside router port to the lswitch port with a PatchAttachment
334-
niciraNvpApi.updateLogicalRouterPortAttachment(lrc.getUuid(), lrpi.getUuid(), new PatchAttachment(lsp.getUuid()));
335-
336-
// Attach the inside lswitch port to the router with a PatchAttachment
337-
niciraNvpApi.updateLogicalSwitchPortAttachment(logicalSwitchUuid, lsp.getUuid(), new PatchAttachment(lrpi.getUuid()));
338-
339-
// Setup the source nat rule
340-
final SourceNatRule snr = new SourceNatRule();
341-
snr.setToSourceIpAddressMin(publicNetworkIpAddress.split("/")[0]);
342-
snr.setToSourceIpAddressMax(publicNetworkIpAddress.split("/")[0]);
343-
final Match match = new Match();
344-
match.setSourceIpAddresses(internalNetworkAddress);
345-
snr.setMatch(match);
346-
snr.setOrder(200);
347-
niciraNvpApi.createLogicalRouterNatRule(lrc.getUuid(), snr);
348-
} catch (final NiciraNvpApiException e) {
349-
// We need to destroy the router if we already created it
350-
// this will also take care of any router ports and rules
351-
try {
352-
niciraNvpApi.deleteLogicalRouter(lrc.getUuid());
353-
if (lsp != null) {
354-
niciraNvpApi.deleteLogicalSwitchPort(logicalSwitchUuid, lsp.getUuid());
355-
}
356-
} catch (final NiciraNvpApiException ex) {
357-
}
358-
359-
throw e;
360-
}
361-
362-
return new CreateLogicalRouterAnswer(cmd, true, "Logical Router created (uuid " + lrc.getUuid() + ")", lrc.getUuid());
363-
} catch (final NiciraNvpApiException e) {
364-
retryUtility.addRetry(cmd, NUM_RETRIES);
365-
return retryUtility.retry(cmd, CreateLogicalRouterAnswer.class, e);
366-
}
367-
}
368-
369218
private Answer executeRequest(final DeleteLogicalRouterCommand cmd, final int numRetries) {
370219
try {
371220
niciraNvpApi.deleteLogicalRouter(cmd.getLogicalRouterUuid());
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
//
2+
// Licensed to the Apache Software Foundation (ASF) under one
3+
// or more contributor license agreements. See the NOTICE file
4+
// distributed with this work for additional information
5+
// regarding copyright ownership. The ASF licenses this file
6+
// to you under the Apache License, Version 2.0 (the
7+
// "License"); you may not use this file except in compliance
8+
// with the License. You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing,
13+
// software distributed under the License is distributed on an
14+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
// KIND, either express or implied. See the License for the
16+
// specific language governing permissions and limitations
17+
// under the License.
18+
//
19+
20+
package com.cloud.network.resource.wrapper;
21+
22+
import static com.cloud.network.resource.NiciraNvpResource.NAME_MAX_LEN;
23+
import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
24+
25+
import java.util.ArrayList;
26+
import java.util.List;
27+
28+
import org.apache.log4j.Logger;
29+
30+
import com.cloud.agent.api.Answer;
31+
import com.cloud.agent.api.CreateLogicalRouterAnswer;
32+
import com.cloud.agent.api.CreateLogicalRouterCommand;
33+
import com.cloud.network.nicira.L3GatewayAttachment;
34+
import com.cloud.network.nicira.LogicalRouter;
35+
import com.cloud.network.nicira.LogicalRouterPort;
36+
import com.cloud.network.nicira.LogicalSwitchPort;
37+
import com.cloud.network.nicira.Match;
38+
import com.cloud.network.nicira.NiciraNvpApi;
39+
import com.cloud.network.nicira.NiciraNvpApiException;
40+
import com.cloud.network.nicira.NiciraNvpTag;
41+
import com.cloud.network.nicira.PatchAttachment;
42+
import com.cloud.network.nicira.RouterNextHop;
43+
import com.cloud.network.nicira.SingleDefaultRouteImplicitRoutingConfig;
44+
import com.cloud.network.nicira.SourceNatRule;
45+
import com.cloud.network.resource.NiciraNvpResource;
46+
import com.cloud.network.utils.CommandRetryUtility;
47+
import com.cloud.resource.CommandWrapper;
48+
import com.cloud.resource.ResourceWrapper;
49+
50+
@ResourceWrapper(handles = CreateLogicalRouterCommand.class)
51+
public final class NiciraNvpCreateLogicalRouterCommandWrapper extends CommandWrapper<CreateLogicalRouterCommand, Answer, NiciraNvpResource> {
52+
53+
private static final Logger s_logger = Logger.getLogger(NiciraNvpCreateLogicalRouterCommandWrapper.class);
54+
55+
@Override
56+
public Answer execute(final CreateLogicalRouterCommand command, final NiciraNvpResource niciraNvpResource) {
57+
final String routerName = command.getName();
58+
final String gatewayServiceUuid = command.getGatewayServiceUuid();
59+
final String logicalSwitchUuid = command.getLogicalSwitchUuid();
60+
61+
final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>();
62+
tags.add(new NiciraNvpTag("cs_account", command.getOwnerName()));
63+
64+
final String publicNetworkNextHopIp = command.getPublicNextHop();
65+
final String publicNetworkIpAddress = command.getPublicIpCidr();
66+
final String internalNetworkAddress = command.getInternalIpCidr();
67+
68+
s_logger.debug("Creating a logical router with external ip " + publicNetworkIpAddress + " and internal ip " + internalNetworkAddress + "on gateway service " +
69+
gatewayServiceUuid);
70+
71+
final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
72+
73+
try {
74+
// Create the Router
75+
LogicalRouter lrc = new LogicalRouter();
76+
lrc.setDisplayName(niciraNvpResource.truncate(routerName, NAME_MAX_LEN));
77+
lrc.setTags(tags);
78+
lrc.setRoutingConfig(new SingleDefaultRouteImplicitRoutingConfig(new RouterNextHop(publicNetworkNextHopIp)));
79+
lrc = niciraNvpApi.createLogicalRouter(lrc);
80+
81+
// store the switchport for rollback
82+
LogicalSwitchPort lsp = null;
83+
84+
try {
85+
// Create the outside port for the router
86+
LogicalRouterPort lrpo = new LogicalRouterPort();
87+
lrpo.setAdminStatusEnabled(true);
88+
lrpo.setDisplayName(niciraNvpResource.truncate(routerName + "-outside-port", NAME_MAX_LEN));
89+
lrpo.setTags(tags);
90+
final List<String> outsideIpAddresses = new ArrayList<String>();
91+
outsideIpAddresses.add(publicNetworkIpAddress);
92+
lrpo.setIpAddresses(outsideIpAddresses);
93+
lrpo = niciraNvpApi.createLogicalRouterPort(lrc.getUuid(), lrpo);
94+
95+
// Attach the outside port to the gateway service on the correct VLAN
96+
final L3GatewayAttachment attachment = new L3GatewayAttachment(gatewayServiceUuid);
97+
if (command.getVlanId() != 0) {
98+
attachment.setVlanId(command.getVlanId());
99+
}
100+
niciraNvpApi.updateLogicalRouterPortAttachment(lrc.getUuid(), lrpo.getUuid(), attachment);
101+
102+
// Create the inside port for the router
103+
LogicalRouterPort lrpi = new LogicalRouterPort();
104+
lrpi.setAdminStatusEnabled(true);
105+
lrpi.setDisplayName(niciraNvpResource.truncate(routerName + "-inside-port", NAME_MAX_LEN));
106+
lrpi.setTags(tags);
107+
final List<String> insideIpAddresses = new ArrayList<String>();
108+
insideIpAddresses.add(internalNetworkAddress);
109+
lrpi.setIpAddresses(insideIpAddresses);
110+
lrpi = niciraNvpApi.createLogicalRouterPort(lrc.getUuid(), lrpi);
111+
112+
// Create the inside port on the lswitch
113+
lsp = new LogicalSwitchPort(niciraNvpResource.truncate(routerName + "-inside-port", NAME_MAX_LEN), tags, true);
114+
lsp = niciraNvpApi.createLogicalSwitchPort(logicalSwitchUuid, lsp);
115+
116+
// Attach the inside router port to the lswitch port with a PatchAttachment
117+
niciraNvpApi.updateLogicalRouterPortAttachment(lrc.getUuid(), lrpi.getUuid(), new PatchAttachment(lsp.getUuid()));
118+
119+
// Attach the inside lswitch port to the router with a PatchAttachment
120+
niciraNvpApi.updateLogicalSwitchPortAttachment(logicalSwitchUuid, lsp.getUuid(), new PatchAttachment(lrpi.getUuid()));
121+
122+
// Setup the source nat rule
123+
final SourceNatRule snr = new SourceNatRule();
124+
snr.setToSourceIpAddressMin(publicNetworkIpAddress.split("/")[0]);
125+
snr.setToSourceIpAddressMax(publicNetworkIpAddress.split("/")[0]);
126+
final Match match = new Match();
127+
match.setSourceIpAddresses(internalNetworkAddress);
128+
snr.setMatch(match);
129+
snr.setOrder(200);
130+
niciraNvpApi.createLogicalRouterNatRule(lrc.getUuid(), snr);
131+
} catch (final NiciraNvpApiException e) {
132+
// We need to destroy the router if we already created it
133+
// this will also take care of any router ports and rules
134+
try {
135+
niciraNvpApi.deleteLogicalRouter(lrc.getUuid());
136+
if (lsp != null) {
137+
niciraNvpApi.deleteLogicalSwitchPort(logicalSwitchUuid, lsp.getUuid());
138+
}
139+
} catch (final NiciraNvpApiException ex) {
140+
}
141+
142+
throw e;
143+
}
144+
145+
return new CreateLogicalRouterAnswer(command, true, "Logical Router created (uuid " + lrc.getUuid() + ")", lrc.getUuid());
146+
} catch (final NiciraNvpApiException e) {
147+
final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility();
148+
retryUtility.addRetry(command, NUM_RETRIES);
149+
return retryUtility.retry(command, CreateLogicalRouterAnswer.class, e);
150+
}
151+
}
152+
}

plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/wrapper/NiciraNvpDeleteLogicalSwitchPortCommandWrapper.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121

2222
import static com.cloud.network.resource.NiciraNvpResource.NUM_RETRIES;
2323

24-
import org.apache.log4j.Logger;
25-
2624
import com.cloud.agent.api.Answer;
2725
import com.cloud.agent.api.DeleteLogicalSwitchPortAnswer;
2826
import com.cloud.agent.api.DeleteLogicalSwitchPortCommand;
@@ -36,8 +34,6 @@
3634
@ResourceWrapper(handles = DeleteLogicalSwitchPortCommand.class)
3735
public final class NiciraNvpDeleteLogicalSwitchPortCommandWrapper extends CommandWrapper<DeleteLogicalSwitchPortCommand, Answer, NiciraNvpResource> {
3836

39-
private static final Logger s_logger = Logger.getLogger(NiciraNvpDeleteLogicalSwitchPortCommandWrapper.class);
40-
4137
@Override
4238
public Answer execute(final DeleteLogicalSwitchPortCommand command, final NiciraNvpResource niciraNvpResource) {
4339
final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();

0 commit comments

Comments
 (0)