Skip to content

Commit

Permalink
Use NSX specific RestClient in API implementation (NiciraNvpApi)
Browse files Browse the repository at this point in the history
- Simplify public API to return Lists instead of NiciraNvpLists
  • Loading branch information
miguelaferreira committed Aug 25, 2015
1 parent c6602ee commit 09f7153
Show file tree
Hide file tree
Showing 12 changed files with 539 additions and 617 deletions.
@@ -0,0 +1,42 @@
//
// 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.nicira;

public class NiciraConstants {

public static final String SEC_PROFILE_URI_PREFIX = "/ws.v1/security-profile";
public static final String ACL_URI_PREFIX = "/ws.v1/acl";
public static final String SWITCH_URI_PREFIX = "/ws.v1/lswitch";
public static final String ROUTER_URI_PREFIX = "/ws.v1/lrouter";
public static final String LOGIN_URL = "/ws.v1/login";
public static final String CONTROL_CLUSTER_STATUS_URL = "/ws.v1/control-cluster/status";

public static final String ATTACHMENT_PATH_SEGMENT = "/attachment";
public static final String NAT_PATH_SEGMENT = "/nat";
public static final String LPORT_PATH_SEGMENT = "/lport";

public static final String ATTACHMENT_VIF_UUID_QUERY_PARAMETER_NAME = "attachment_vif_uuid";
public static final String ATTACHMENT_VLAN_PARAMETER = "attachment_vlan";
public static final String ATTACHMENT_GWSVC_UUID_QUERY_PARAMETER = "attachment_gwsvc_uuid";
public static final String WILDCARD_QUERY_PARAMETER = "*";
public static final String UUID_QUERY_PARAMETER = "uuid";
public static final String FIELDS_QUERY_PARAMETER = "fields";

}

Large diffs are not rendered by default.

Expand Up @@ -19,6 +19,9 @@

package com.cloud.network.resource;

import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.util.Map;

import javax.naming.ConfigurationException;
Expand All @@ -42,13 +45,16 @@
import com.cloud.network.nicira.SourceNatRule;
import com.cloud.network.utils.CommandRetryUtility;
import com.cloud.resource.ServerResource;
import com.cloud.utils.rest.CloudstackRESTException;
import com.cloud.utils.rest.HttpClientHelper;

public class NiciraNvpResource implements ServerResource {

private static final Logger s_logger = Logger.getLogger(NiciraNvpResource.class);

public static final int NAME_MAX_LEN = 40;
public static final int NUM_RETRIES = 2;
private static final int MAX_REDIRECTS = 5;

private String name;
private String guid;
Expand All @@ -58,8 +64,16 @@ public class NiciraNvpResource implements ServerResource {
private NiciraNvpUtilities niciraNvpUtilities;
private CommandRetryUtility retryUtility;

protected NiciraNvpApi createNiciraNvpApi() {
return new NiciraNvpApi();
protected NiciraNvpApi createNiciraNvpApi(final String host, final String username, final String password) throws CloudstackRESTException {
try {
return NiciraNvpApi.create().host(host).username(username).password(password).httpClient(HttpClientHelper.createHttpClient(MAX_REDIRECTS)).build();
} catch (final KeyManagementException e) {
throw new CloudstackRESTException("Could not create HTTP client", e);
} catch (final NoSuchAlgorithmException e) {
throw new CloudstackRESTException("Could not create HTTP client", e);
} catch (final KeyStoreException e) {
throw new CloudstackRESTException("Could not create HTTP client", e);
}
}

@Override
Expand Down Expand Up @@ -99,9 +113,11 @@ public boolean configure(final String ignoredName, final Map<String, Object> par
retryUtility = CommandRetryUtility.getInstance();
retryUtility.setServerResource(this);

niciraNvpApi = createNiciraNvpApi();
niciraNvpApi.setControllerAddress(ip);
niciraNvpApi.setAdminCredentials(adminuser, adminpass);
try {
niciraNvpApi = createNiciraNvpApi(ip, adminuser, adminpass);
} catch (final CloudstackRESTException e) {
throw new ConfigurationException("Could not create a Nicira Nvp API client: " + e.getMessage());
}

return true;
}
Expand Down
Expand Up @@ -21,6 +21,8 @@

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

import java.util.List;

import org.apache.log4j.Logger;

import com.cloud.agent.api.Answer;
Expand All @@ -30,7 +32,6 @@
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;
Expand All @@ -45,7 +46,7 @@ public final class NiciraNvpConfigurePortForwardingRulesCommandWrapper extends C
public Answer execute(final ConfigurePortForwardingRulesOnLogicalRouterCommand command, final NiciraNvpResource niciraNvpResource) {
final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
try {
final NiciraNvpList<NatRule> existingRules = niciraNvpApi.findNatRulesByLogicalRouterUuid(command.getLogicalRouterUuid());
final List<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
Expand All @@ -66,7 +67,7 @@ public Answer execute(final ConfigurePortForwardingRulesOnLogicalRouterCommand c
NatRule incoming = null;
NatRule outgoing = null;

for (final NatRule storedRule : existingRules.getResults()) {
for (final NatRule storedRule : existingRules) {
if (storedRule.equalsIgnoreUuid(rulepair[1])) {
// The outgoing rule exists
outgoing = storedRule;
Expand Down
Expand Up @@ -21,13 +21,14 @@

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

import java.util.List;

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;
Expand All @@ -41,11 +42,11 @@ public Answer execute(final ConfigurePublicIpsOnLogicalRouterCommand command, fi
final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();

try {
final NiciraNvpList<LogicalRouterPort> ports = niciraNvpApi.findLogicalRouterPortByGatewayServiceUuid(command.getLogicalRouterUuid(), command.getL3GatewayServiceUuid());
if (ports.getResultCount() != 1) {
final List<LogicalRouterPort> ports = niciraNvpApi.findLogicalRouterPortByGatewayServiceUuid(command.getLogicalRouterUuid(), command.getL3GatewayServiceUuid());
if (ports.size() != 1) {
return new ConfigurePublicIpsOnLogicalRouterAnswer(command, false, "No logical router ports found, unable to set ip addresses");
}
final LogicalRouterPort lrp = ports.getResults().get(0);
final LogicalRouterPort lrp = ports.get(0);
lrp.setIpAddresses(command.getPublicCidrs());
niciraNvpApi.updateLogicalRouterPort(command.getLogicalRouterUuid(), lrp);

Expand Down
Expand Up @@ -21,6 +21,8 @@

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

import java.util.List;

import org.apache.log4j.Logger;

import com.cloud.agent.api.Answer;
Expand All @@ -30,7 +32,6 @@
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;
Expand All @@ -46,7 +47,7 @@ public Answer execute(final ConfigureStaticNatRulesOnLogicalRouterCommand comman
final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();

try {
final NiciraNvpList<NatRule> existingRules = niciraNvpApi.findNatRulesByLogicalRouterUuid(command.getLogicalRouterUuid());
final List<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
Expand All @@ -58,7 +59,7 @@ public Answer execute(final ConfigureStaticNatRulesOnLogicalRouterCommand comman
NatRule incoming = null;
NatRule outgoing = null;

for (final NatRule storedRule : existingRules.getResults()) {
for (final NatRule storedRule : existingRules) {
if (storedRule.equalsIgnoreUuid(rulepair[1])) {
// The outgoing rule exists
outgoing = storedRule;
Expand Down
Expand Up @@ -21,13 +21,14 @@

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

import java.util.List;

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;
Expand All @@ -44,8 +45,8 @@ public Answer execute(final FindLogicalSwitchPortCommand command, final NiciraNv
final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();

try {
final NiciraNvpList<LogicalSwitchPort> ports = niciraNvpApi.findLogicalSwitchPortsByUuid(logicalSwitchUuid, logicalSwitchPortUuid);
if (ports.getResultCount() == 0) {
final List<LogicalSwitchPort> ports = niciraNvpApi.findLogicalSwitchPortsByUuid(logicalSwitchUuid, logicalSwitchPortUuid);
if (ports.size() == 0) {
return new FindLogicalSwitchPortAnswer(command, false, "Logical switchport " + logicalSwitchPortUuid + " not found", null);
} else {
return new FindLogicalSwitchPortAnswer(command, true, "Logical switchport " + logicalSwitchPortUuid + " found", logicalSwitchPortUuid);
Expand Down

0 comments on commit 09f7153

Please sign in to comment.