Search in sources :

Example 11 with NiciraNvpApi

use of com.cloud.network.nicira.NiciraNvpApi in project cloudstack by apache.

the class NiciraNvpConfigurePortForwardingRulesCommandWrapper method execute.

@Override
public Answer execute(final ConfigurePortForwardingRulesOnLogicalRouterCommand command, final NiciraNvpResource niciraNvpResource) {
    final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
    try {
        final List<NatRule> existingRules = niciraNvpApi.findNatRulesByLogicalRouterUuid(command.getLogicalRouterUuid());
        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) {
                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());
                    // Rethrow the original exception
                    throw ex;
                }
            }
        }
        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);
    }
}
Also used : PortForwardingRuleTO(com.cloud.agent.api.to.PortForwardingRuleTO) NiciraNvpApi(com.cloud.network.nicira.NiciraNvpApi) NatRule(com.cloud.network.nicira.NatRule) CommandRetryUtility(com.cloud.network.utils.CommandRetryUtility) NiciraNvpApiException(com.cloud.network.nicira.NiciraNvpApiException) ConfigurePortForwardingRulesOnLogicalRouterAnswer(com.cloud.agent.api.ConfigurePortForwardingRulesOnLogicalRouterAnswer)

Example 12 with NiciraNvpApi

use of com.cloud.network.nicira.NiciraNvpApi in project cloudstack by apache.

the class NiciraNvpConfigureSharedNetworkUuidCommandWrapper method execute.

@Override
public Answer execute(ConfigureSharedNetworkUuidCommand command, NiciraNvpResource niciraNvpResource) {
    final String logicalRouterUuid = command.getLogicalRouterUuid();
    final String logicalSwitchUuid = command.getLogicalSwitchUuid();
    final String portIpAddress = command.getPortIpAddress();
    final List<NiciraNvpTag> tags = new ArrayList<NiciraNvpTag>();
    tags.add(new NiciraNvpTag("cs_account", command.getOwnerName()));
    final long networkId = command.getNetworkId();
    final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
    s_logger.debug("Attaching Logical Switch " + logicalSwitchUuid + " on Logical Router " + logicalRouterUuid + " for Shared Network " + networkId);
    //Step 1: Get lSwitch displayName
    s_logger.info("Looking for Logical Switch " + logicalSwitchUuid + " display name");
    String logicalSwitchDisplayName;
    try {
        List<LogicalSwitch> lSwitchList = niciraNvpApi.findLogicalSwitch(logicalSwitchUuid);
        if (lSwitchList != null) {
            if (lSwitchList.size() == 1) {
                logicalSwitchDisplayName = lSwitchList.get(0).getDisplayName();
            } else {
                s_logger.error("More than one Logical Switch found with uuid " + logicalSwitchUuid);
                throw new CloudRuntimeException("More than one Logical Switch found with uuid=" + logicalSwitchUuid);
            }
        } else {
            s_logger.error("Logical Switch " + logicalSwitchUuid + " not found");
            throw new CloudRuntimeException("Logical Switch " + logicalSwitchUuid + " not found");
        }
    } catch (NiciraNvpApiException e) {
        s_logger.warn("Logical Switch " + logicalSwitchUuid + " not found, retrying");
        final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility();
        retryUtility.addRetry(command, NUM_RETRIES);
        return retryUtility.retry(command, ConfigureSharedNetworkUuidAnswer.class, e);
    } catch (CloudRuntimeException e) {
        s_logger.info("Shared network UUID vlan id failed due to : " + e.getMessage());
        return new ConfigureSharedNetworkUuidAnswer(command, false, e.getMessage());
    }
    s_logger.info("Found display name " + logicalSwitchDisplayName + " for Logical Switch " + logicalSwitchUuid);
    //Step 2: Create lRouterPort
    s_logger.debug("Creating Logical Router Port in Logical Router " + logicalRouterUuid);
    LogicalRouterPort lRouterPort = null;
    try {
        lRouterPort = new LogicalRouterPort();
        lRouterPort.setAdminStatusEnabled(true);
        lRouterPort.setDisplayName(niciraNvpResource.truncate(logicalSwitchDisplayName + "-uplink", NAME_MAX_LEN));
        lRouterPort.setTags(tags);
        final List<String> ipAddresses = new ArrayList<String>();
        ipAddresses.add(portIpAddress);
        lRouterPort.setIpAddresses(ipAddresses);
        lRouterPort = niciraNvpApi.createLogicalRouterPort(logicalRouterUuid, lRouterPort);
    } catch (NiciraNvpApiException e) {
        s_logger.warn("Could not create Logical Router Port on Logical Router " + logicalRouterUuid + " due to: " + e.getMessage() + ", retrying");
        return handleException(e, command, niciraNvpResource);
    }
    s_logger.debug("Logical Router Port " + lRouterPort.getUuid() + " (" + lRouterPort.getDisplayName() + ") successfully created in Logical Router " + logicalRouterUuid);
    //Step 3: Create lSwitchPort
    s_logger.debug("Creating Logical Switch Port in Logical Switch " + logicalSwitchUuid + " (" + logicalSwitchDisplayName + ")");
    LogicalSwitchPort lSwitchPort = null;
    try {
        lSwitchPort = new LogicalSwitchPort(niciraNvpResource.truncate("lrouter-uplink", NAME_MAX_LEN), tags, true);
        lSwitchPort = niciraNvpApi.createLogicalSwitchPort(logicalSwitchUuid, lSwitchPort);
    } catch (NiciraNvpApiException e) {
        s_logger.warn("Could not create Logical Switch Port on Logical Switch " + logicalSwitchUuid + " (" + logicalSwitchDisplayName + ")  due to: " + e.getMessage());
        cleanupLRouterPort(logicalRouterUuid, lRouterPort, niciraNvpApi);
        return handleException(e, command, niciraNvpResource);
    }
    s_logger.debug("Logical Switch Port " + lSwitchPort.getUuid() + " (" + lSwitchPort.getDisplayName() + ") successfully created in Logical Switch " + logicalSwitchUuid + " (" + logicalSwitchDisplayName + ")");
    //Step 4: Attach lRouterPort to lSwitchPort with a PatchAttachment
    s_logger.debug("Attaching Logical Router Port " + lRouterPort.getUuid() + " (" + lRouterPort.getDisplayName() + ") to Logical Switch Port " + lSwitchPort.getUuid() + " (" + lSwitchPort.getDisplayName() + ") with a PatchAttachment");
    try {
        niciraNvpApi.updateLogicalRouterPortAttachment(logicalRouterUuid, lRouterPort.getUuid(), new PatchAttachment(lSwitchPort.getUuid()));
    } catch (NiciraNvpApiException e) {
        s_logger.warn("Could not attach Logical Router Port " + lRouterPort.getUuid() + " (" + lRouterPort.getDisplayName() + ") to Logical Switch Port " + lSwitchPort.getUuid() + " (" + lSwitchPort.getDisplayName() + ") due to: " + e.getMessage() + ", retrying");
        cleanupLRouterPort(logicalRouterUuid, lRouterPort, niciraNvpApi);
        cleanupLSwitchPort(logicalSwitchUuid, lSwitchPort, niciraNvpApi);
        return handleException(e, command, niciraNvpResource);
    }
    s_logger.debug("Logical Router Port " + lRouterPort.getUuid() + " (" + lRouterPort.getDisplayName() + ") successfully attached to to Logical Switch Port " + lSwitchPort.getUuid() + " (" + lSwitchPort.getDisplayName() + ") with a PatchAttachment");
    //Step 5: Attach lSwitchPort to lRouterPort with a PatchAttachment
    s_logger.debug("Attaching Logical Switch Port " + lSwitchPort.getUuid() + " (" + lSwitchPort.getDisplayName() + ") to Logical Router Port " + lRouterPort.getUuid() + " (" + lRouterPort.getDisplayName() + ") with a PatchAttachment");
    try {
        niciraNvpApi.updateLogicalSwitchPortAttachment(logicalSwitchUuid, lSwitchPort.getUuid(), new PatchAttachment(lRouterPort.getUuid()));
    } catch (NiciraNvpApiException e) {
        s_logger.warn("Could not attach Logical Switch Port " + lSwitchPort.getUuid() + " (" + lSwitchPort.getDisplayName() + ") to Logical Router Port " + lRouterPort.getUuid() + " (" + lRouterPort.getDisplayName() + ") due to: " + e.getMessage() + ", retrying");
        cleanupLRouterPort(logicalRouterUuid, lRouterPort, niciraNvpApi);
        cleanupLSwitchPort(logicalSwitchUuid, lSwitchPort, niciraNvpApi);
        return handleException(e, command, niciraNvpResource);
    }
    s_logger.debug("Logical Switch Port " + lSwitchPort.getUuid() + " (" + lSwitchPort.getDisplayName() + ") successfully attached to to Logical Router Port " + lRouterPort.getUuid() + " (" + lRouterPort.getDisplayName() + ") with a PatchAttachment");
    s_logger.info("Successfully attached Logical Switch " + logicalSwitchUuid + " on Logical Router " + logicalRouterUuid + " for Shared Network " + networkId);
    return new ConfigureSharedNetworkUuidAnswer(command, true, "OK");
}
Also used : ConfigureSharedNetworkUuidAnswer(com.cloud.agent.api.ConfigureSharedNetworkUuidAnswer) LogicalRouterPort(com.cloud.network.nicira.LogicalRouterPort) LogicalSwitch(com.cloud.network.nicira.LogicalSwitch) ArrayList(java.util.ArrayList) PatchAttachment(com.cloud.network.nicira.PatchAttachment) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) NiciraNvpTag(com.cloud.network.nicira.NiciraNvpTag) NiciraNvpApi(com.cloud.network.nicira.NiciraNvpApi) CommandRetryUtility(com.cloud.network.utils.CommandRetryUtility) NiciraNvpApiException(com.cloud.network.nicira.NiciraNvpApiException) LogicalSwitchPort(com.cloud.network.nicira.LogicalSwitchPort)

Example 13 with NiciraNvpApi

use of com.cloud.network.nicira.NiciraNvpApi in project cloudstack by apache.

the class NiciraNvpFindL2GatewayServiceCommandWrapper method execute.

@Override
public Answer execute(FindL2GatewayServiceCommand command, NiciraNvpResource niciraNvpResource) {
    final GatewayServiceConfig config = command.getGatewayServiceConfig();
    final String uuid = config.getUuid();
    final String type = config.getType();
    final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
    s_logger.info("Looking for L2 Gateway Service " + uuid + " of type " + type);
    try {
        List<L2GatewayServiceConfig> lstGW = niciraNvpApi.findL2GatewayServiceByUuidAndType(uuid, type);
        if (lstGW.size() == 0) {
            return new FindL2GatewayServiceAnswer(command, false, "L2 Gateway Service not found", null);
        } else {
            return new FindL2GatewayServiceAnswer(command, true, "L2 Gateway Service " + lstGW.get(0).getDisplayName() + " found", lstGW.get(0).getUuid());
        }
    } catch (NiciraNvpApiException e) {
        s_logger.error("Error finding Gateway Service due to: " + e.getMessage());
        final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility();
        retryUtility.addRetry(command, NUM_RETRIES);
        return retryUtility.retry(command, FindL2GatewayServiceAnswer.class, e);
    }
}
Also used : FindL2GatewayServiceAnswer(com.cloud.agent.api.FindL2GatewayServiceAnswer) L2GatewayServiceConfig(com.cloud.network.nicira.L2GatewayServiceConfig) NiciraNvpApi(com.cloud.network.nicira.NiciraNvpApi) GatewayServiceConfig(com.cloud.network.nicira.GatewayServiceConfig) L2GatewayServiceConfig(com.cloud.network.nicira.L2GatewayServiceConfig) CommandRetryUtility(com.cloud.network.utils.CommandRetryUtility) NiciraNvpApiException(com.cloud.network.nicira.NiciraNvpApiException)

Example 14 with NiciraNvpApi

use of com.cloud.network.nicira.NiciraNvpApi in project cloudstack by apache.

the class NiciraNvpFindLogicalRouterPortCommandWrapper method execute.

@Override
public Answer execute(FindLogicalRouterPortCommand command, NiciraNvpResource niciraNvpResource) {
    final String logicalRouterUuid = command.getLogicalRouterUuid();
    final String attachmentLswitchUuid = command.getAttachmentLswitchUuid();
    final NiciraNvpApi niciraNvpApi = niciraNvpResource.getNiciraNvpApi();
    s_logger.debug("Finding Logical Router Port in Logical Router " + logicalRouterUuid + " and attachmentLSwitchUuid " + attachmentLswitchUuid);
    try {
        List<LogicalRouterPort> lRouterPorts = niciraNvpApi.findLogicalRouterPortByAttachmentLSwitchUuid(logicalRouterUuid, attachmentLswitchUuid);
        if (lRouterPorts.size() == 0) {
            return new FindLogicalRouterPortAnswer(command, false, "Logical Router Port not found", null);
        } else {
            return new FindLogicalRouterPortAnswer(command, true, "Logical Router Port found", lRouterPorts.get(0).getUuid());
        }
    } catch (NiciraNvpApiException e) {
        s_logger.error("Error finding Logical Router Port due to: " + e.getMessage());
        final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility();
        retryUtility.addRetry(command, NUM_RETRIES);
        return retryUtility.retry(command, FindLogicalRouterPortAnswer.class, e);
    }
}
Also used : LogicalRouterPort(com.cloud.network.nicira.LogicalRouterPort) FindLogicalRouterPortAnswer(com.cloud.agent.api.FindLogicalRouterPortAnswer) NiciraNvpApi(com.cloud.network.nicira.NiciraNvpApi) CommandRetryUtility(com.cloud.network.utils.CommandRetryUtility) NiciraNvpApiException(com.cloud.network.nicira.NiciraNvpApiException)

Example 15 with NiciraNvpApi

use of com.cloud.network.nicira.NiciraNvpApi in project cloudstack by apache.

the class NiciraNvpFindLogicalSwitchPortCommandWrapper method execute.

@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 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);
        }
    } catch (final NiciraNvpApiException e) {
        final CommandRetryUtility retryUtility = niciraNvpResource.getRetryUtility();
        retryUtility.addRetry(command, NUM_RETRIES);
        return retryUtility.retry(command, FindLogicalSwitchPortAnswer.class, e);
    }
}
Also used : FindLogicalSwitchPortAnswer(com.cloud.agent.api.FindLogicalSwitchPortAnswer) NiciraNvpApi(com.cloud.network.nicira.NiciraNvpApi) CommandRetryUtility(com.cloud.network.utils.CommandRetryUtility) NiciraNvpApiException(com.cloud.network.nicira.NiciraNvpApiException) LogicalSwitchPort(com.cloud.network.nicira.LogicalSwitchPort)

Aggregations

NiciraNvpApi (com.cloud.network.nicira.NiciraNvpApi)21 NiciraNvpApiException (com.cloud.network.nicira.NiciraNvpApiException)21 CommandRetryUtility (com.cloud.network.utils.CommandRetryUtility)13 Answer (com.cloud.agent.api.Answer)6 ArrayList (java.util.ArrayList)6 Test (org.junit.Test)6 LogicalRouterPort (com.cloud.network.nicira.LogicalRouterPort)5 LogicalSwitchPort (com.cloud.network.nicira.LogicalSwitchPort)5 NiciraNvpTag (com.cloud.network.nicira.NiciraNvpTag)5 LogicalSwitch (com.cloud.network.nicira.LogicalSwitch)3 VifAttachment (com.cloud.network.nicira.VifAttachment)3 NiciraNvpUtilities (com.cloud.network.resource.NiciraNvpUtilities)3 NatRule (com.cloud.network.nicira.NatRule)2 PatchAttachment (com.cloud.network.nicira.PatchAttachment)2 CheckHealthAnswer (com.cloud.agent.api.CheckHealthAnswer)1 ConfigurePortForwardingRulesOnLogicalRouterAnswer (com.cloud.agent.api.ConfigurePortForwardingRulesOnLogicalRouterAnswer)1 ConfigurePublicIpsOnLogicalRouterAnswer (com.cloud.agent.api.ConfigurePublicIpsOnLogicalRouterAnswer)1 ConfigurePublicIpsOnLogicalRouterCommand (com.cloud.agent.api.ConfigurePublicIpsOnLogicalRouterCommand)1 ConfigureSharedNetworkUuidAnswer (com.cloud.agent.api.ConfigureSharedNetworkUuidAnswer)1 ConfigureSharedNetworkVlanIdAnswer (com.cloud.agent.api.ConfigureSharedNetworkVlanIdAnswer)1