X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnorthbound%2Fnetworkconfiguration%2Fbridgedomain%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetworkconfig%2Fbridgedomain%2Fnorthbound%2FBridgeDomainNorthbound.java;h=9ef56e5dc440b612f5f70e0ec823fca3172aad2c;hp=b328f779644d02566bb0c3cc3c1c6000c16c2f61;hb=bfa2b4e3f1a93b97a7f4575116e67a2d20b53c75;hpb=33ea0032f0837333a9181dd7556faa3266155080 diff --git a/opendaylight/northbound/networkconfiguration/bridgedomain/src/main/java/org/opendaylight/controller/networkconfig/bridgedomain/northbound/BridgeDomainNorthbound.java b/opendaylight/northbound/networkconfiguration/bridgedomain/src/main/java/org/opendaylight/controller/networkconfig/bridgedomain/northbound/BridgeDomainNorthbound.java index b328f77964..9ef56e5dc4 100644 --- a/opendaylight/northbound/networkconfiguration/bridgedomain/src/main/java/org/opendaylight/controller/networkconfig/bridgedomain/northbound/BridgeDomainNorthbound.java +++ b/opendaylight/northbound/networkconfiguration/bridgedomain/src/main/java/org/opendaylight/controller/networkconfig/bridgedomain/northbound/BridgeDomainNorthbound.java @@ -12,10 +12,13 @@ package org.opendaylight.controller.networkconfig.bridgedomain.northbound; import java.util.HashMap; import java.util.Map; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; @@ -79,6 +82,10 @@ public class BridgeDomainNorthbound { * @param nodeType Node Type of the node with the management session. * @param nodeId Node Identifier of the node with the management session. * @param bridgeName Name / Identifier for a bridge to be created. + * @param bridgeConfigs Additional Bridge Configurations. + * It takes in complex structures under the ConfigConstants.CUSTOM key. + * The use-cases are documented under wiki.opendaylight.org project pages: + * https://wiki.opendaylight.org/view/OVSDB_Integration:Mininet_OVSDB_Tutorial */ @Path("/bridge/{nodeType}/{nodeId}/{bridgeName}") @@ -91,7 +98,8 @@ public class BridgeDomainNorthbound { public Response createBridge( @PathParam(value = "nodeType") String nodeType, @PathParam(value = "nodeId") String nodeId, - @PathParam(value = "bridgeName") String name) { + @PathParam(value = "bridgeName") String name, + Map bridgeConfigs) { IBridgeDomainConfigService configurationService = getConfigurationService(); if (configurationService == null) { @@ -101,16 +109,66 @@ public class BridgeDomainNorthbound { Node node = Node.fromString(nodeType, nodeId); Status status = null; try { - status = configurationService.createBridgeDomain(node, name, null); + Map configs = this.buildConfig(bridgeConfigs); + status = configurationService.createBridgeDomain(node, name, configs); if (status.getCode().equals(StatusCode.SUCCESS)) { return Response.status(Response.Status.CREATED).build(); } + } catch (Error e) { + throw e; } catch (Throwable t) { return Response.status(Response.Status.PRECONDITION_FAILED).build(); } throw new ResourceNotFoundException(status.getDescription()); } + + /** + * Remove a Bridge. + *
+    *
+    * Example :
+    *
+    * Request :
+    * DELETE
+    * http://localhost:8080/controller/nb/v2/networkconfig/bridgedomain/bridge/STUB/mgmt1/bridge1
+    *
+    *
+ * @param nodeType Node Type of the node with the management session. + * @param nodeId Node Identifier of the node with the management session. + * @param bridgeName Name / Identifier for a bridge to be deleted. + */ + + @Path("/bridge/{nodeType}/{nodeId}/{bridgeName}") + @DELETE + @StatusCodes( { @ResponseCode(code = 200, condition = "Bridge deleted successfully"), + @ResponseCode(code = 404, condition = "Could not delete Bridge"), + @ResponseCode(code = 412, condition = "Failed to delete Bridge due to an exception"), + @ResponseCode(code = 503, condition = "Bridge Domain Configuration Service not available")} ) + + public Response deleteBridge( + @PathParam(value = "nodeType") String nodeType, + @PathParam(value = "nodeId") String nodeId, + @PathParam(value = "bridgeName") String name) { + + IBridgeDomainConfigService configurationService = getConfigurationService(); + if (configurationService == null) { + throw new ServiceUnavailableException("IBridgeDomainConfigService not available."); + } + + Node node = Node.fromString(nodeType, nodeId); + Status status = null; + try { + status = configurationService.deleteBridgeDomain(node, name); + if (status.getCode().equals(StatusCode.SUCCESS)) { + return Response.status(Response.Status.OK).build(); + } + } catch (Exception t) { + return Response.status(Response.Status.PRECONDITION_FAILED).build(); + } + throw new ResourceNotFoundException(status.getDescription()); + } + /** * Add a Port to a Bridge *
@@ -125,10 +183,15 @@ public class BridgeDomainNorthbound {
     * @param nodeId Node Identifier of the node with the management session.
     * @param bridgeName Name / Identifier of the bridge to which a Port is being added.
     * @param portName Name / Identifier of a Port that is being added to a bridge.
+    * @param portConfigs Additional Port Configurations.
+    *        It takes in complex structures under the ConfigConstants.CUSTOM key.
+    *        The use-cases are documented under wiki.opendaylight.org project pages :
+    *        https://wiki.opendaylight.org/view/OVSDB_Integration:Mininet_OVSDB_Tutorial
     */
 
    @Path("/port/{nodeType}/{nodeId}/{bridgeName}/{portName}")
    @POST
+   @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    @StatusCodes( { @ResponseCode(code = 201, condition = "Port added successfully"),
        @ResponseCode(code = 404, condition = "Could not add Port to the Bridge"),
        @ResponseCode(code = 412, condition = "Failed to add Port due to an exception"),
@@ -138,7 +201,8 @@ public class BridgeDomainNorthbound {
            @PathParam(value = "nodeType") String nodeType,
            @PathParam(value = "nodeId") String nodeId,
            @PathParam(value = "bridgeName") String bridge,
-           @PathParam(value = "portName") String port) {
+           @PathParam(value = "portName") String port,
+           Map portConfigs) {
 
        IBridgeDomainConfigService configurationService = getConfigurationService();
        if (configurationService == null) {
@@ -148,17 +212,76 @@ public class BridgeDomainNorthbound {
        Node node = Node.fromString(nodeType, nodeId);
        Status status = null;
        try {
-           status = configurationService.addPort(node, bridge, port, null);
+           Map configs = this.buildConfig(portConfigs);
+           status = configurationService.addPort(node, bridge, port, configs);
            if (status.getCode().equals(StatusCode.SUCCESS)) {
                return Response.status(Response.Status.CREATED).build();
            }
-       } catch (Throwable t) {
+       } catch (Exception t) {
            return Response.status(Response.Status.PRECONDITION_FAILED).build();
        }
        throw new ResourceNotFoundException(status.getDescription());
    }
 
    /**
+    * Remove a Port from a Bridge
+    * 
+    *
+    * Example :
+    *
+    * Request :
+    * DELETE
+    * http://localhost:8080/controller/nb/v2/networkconfig/bridgedomain/port/STUB/mgmt1/bridge1/port1
+    *
+    *
+ * @param nodeType Node Type of the node with the management session. + * @param nodeId Node Identifier of the node with the management session. + * @param bridgeName Name / Identifier of the bridge to which a Port is being added. + * @param portName Name / Identifier of a Port that is being deleted from a bridge. + */ + + @Path("/port/{nodeType}/{nodeId}/{bridgeName}/{portName}") + @DELETE + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @StatusCodes( { @ResponseCode(code = 200, condition = "Port deleted successfully"), + @ResponseCode(code = 404, condition = "Could not delete Port to the Bridge"), + @ResponseCode(code = 412, condition = "Failed to delete Port due to an exception"), + @ResponseCode(code = 503, condition = "Bridge Domain Configuration Service not available")} ) + + public Response deletePort( + @PathParam(value = "nodeType") String nodeType, + @PathParam(value = "nodeId") String nodeId, + @PathParam(value = "bridgeName") String bridge, + @PathParam(value = "portName") String port) { + + IBridgeDomainConfigService configurationService = getConfigurationService(); + if (configurationService == null) { + throw new ServiceUnavailableException("IBridgeDomainConfigService not available."); + } + + Node node = Node.fromString(nodeType, nodeId); + Status status = null; + try { + status = configurationService.deletePort(node, bridge, port); + if (status.getCode().equals(StatusCode.SUCCESS)) { + return Response.status(Response.Status.OK).build(); + } + } catch (Exception t) { + return Response.status(Response.Status.PRECONDITION_FAILED).build(); + } + throw new ResourceNotFoundException(status.getDescription()); + } + + private Map buildConfig(Map rawConfigs) { + if (rawConfigs == null) return null; + Map configs = new HashMap(); + for (String key : rawConfigs.keySet()) { + ConfigConstants cc = ConfigConstants.valueOf(key.toUpperCase()); + configs.put(cc, rawConfigs.get(key)); + } + return configs; + } +/** * Add a Port,Vlan to a Bridge *
     *