RPC to delete link 87/74287/2
authorDhruv Bhardwaj <db929a@att.com>
Mon, 9 Jul 2018 04:25:04 +0000 (00:25 -0400)
committerguillaume.lambert <guillaume.lambert@orange.com>
Sat, 28 Jul 2018 23:22:30 +0000 (01:22 +0200)
Implemented RPC to delete link with a given link-id

JIRA: TRNSPRTPCE-16

Change-Id: I722002997250d4dd07a2f9195f4828eecc7dcfee

.gitignore
api/src/main/yang/networkutils@2017-08-18.yang
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java

index 154143d976e382ce18f19c3159449809d0ced9c3..8e3726427f8945aef83b90d98b37b975d6a18c06 100644 (file)
@@ -11,6 +11,7 @@ target-ide
 .project
 .settings
 .idea
+.iml
 xtend-gen
 yang-gen-config
 yang-gen-sal
index 923094754024f4c1bef17b305f5de287857a7330..d4f872781c2cf3db858b940888c130b6da1c7499 100644 (file)
@@ -83,4 +83,18 @@ module networkutils {
             }
         }
     }
+    rpc delete-link {
+        description "This rpc deletes a given link in openroadm Topology layer";
+        input {
+            leaf link-id {
+                type string;
+            }
+        }
+        output {
+            leaf result {
+              type string;
+            }
+        }
+    }
+
 }
index e42520f0f41df480535eb58aa03162bb3d3b1fc9..4286976185b1a030368690fdb71f2bf6a598d033 100644 (file)
@@ -7,10 +7,27 @@
  */
 package org.opendaylight.transportpce.networkmodel;
 
+import com.google.common.base.Optional;
+
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.LinkKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.DeleteLinkInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.DeleteLinkOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.DeleteLinkOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRdmXpdrLinksInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRdmXpdrLinksOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRdmXpdrLinksOutputBuilder;
@@ -21,6 +38,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networku
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitXpdrRdmLinksOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitXpdrRdmLinksOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.NetworkutilsService;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
@@ -37,14 +55,58 @@ public class NetworkUtilsImpl implements NetworkutilsService {
         this.openRoadmTopology = openRoadmTopology;
     }
 
+    @Override
+    public Future<RpcResult<DeleteLinkOutput>> deleteLink(DeleteLinkInput input) {
+
+        LinkId linkId = new LinkId(input.getLinkId());
+        // Building link instance identifier
+        InstanceIdentifier.InstanceIdentifierBuilder<Link> linkIID = InstanceIdentifier.builder(Network.class,
+            new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+                .augmentation(Network1.class).child(Link.class, new LinkKey(linkId));
+
+        //Check if link exists
+        try {
+            ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction();
+            Optional<Link> linkOptional = readOnlyTransaction.read(LogicalDatastoreType.CONFIGURATION, linkIID.build())
+                .get();
+            if (!linkOptional.isPresent()) {
+                LOG.info("Link not present");
+                return RpcResultBuilder
+                    .success(new DeleteLinkOutputBuilder().setResult(
+                        "Fail"))
+                    .buildFuture();
+            }
+        } catch (ExecutionException | InterruptedException e) {
+            LOG.error("readMdSal: Error reading link {}", input.getLinkId());
+            return RpcResultBuilder
+                .success(new DeleteLinkOutputBuilder().setResult(
+                    "Fail"))
+                .buildFuture();
+        }
+
+        WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
+        writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, linkIID.build());
+        try {
+            writeTransaction.submit().get();
+            LOG.info("Link with linkId: {} deleted from {} layer.",
+                input.getLinkId(), NetworkUtils.OVERLAY_NETWORK_ID);
+            return RpcResultBuilder
+                .success(new DeleteLinkOutputBuilder().setResult(
+                    "Link {} deleted successfully"))
+                .buildFuture();
+        } catch (InterruptedException | ExecutionException e) {
+            return RpcResultBuilder.<DeleteLinkOutput>failed().buildFuture();
+        }
+    }
+
     public Future<RpcResult<InitRoadmNodesOutput>> initRoadmNodes(InitRoadmNodesInput input) {
         boolean createRdmLinks = OrdLink.createRdm2RdmLinks(input,
-                openRoadmTopology,dataBroker);
+            openRoadmTopology, dataBroker);
         if (createRdmLinks) {
             return RpcResultBuilder
-                    .success(new InitRoadmNodesOutputBuilder().setResult(
-                            "Unidirectional Roadm-to-Roadm Link created successfully"))
-                    .buildFuture();
+                .success(new InitRoadmNodesOutputBuilder().setResult(
+                    "Unidirectional Roadm-to-Roadm Link created successfully"))
+                .buildFuture();
         } else {
             return RpcResultBuilder.<InitRoadmNodesOutput>failed().buildFuture();
         }
@@ -54,11 +116,11 @@ public class NetworkUtilsImpl implements NetworkutilsService {
     public Future<RpcResult<InitXpdrRdmLinksOutput>> initXpdrRdmLinks(InitXpdrRdmLinksInput input) {
         // Assigns user provided input in init-network-view RPC to nodeId
         boolean createXpdrRdmLinks = Rdm2XpdrLink.createXpdrRdmLinks(input.getLinksInput(),
-                openRoadmTopology,dataBroker);
+            openRoadmTopology, dataBroker);
         if (createXpdrRdmLinks) {
             return RpcResultBuilder
-                    .success(new InitXpdrRdmLinksOutputBuilder().setResult("Xponder Roadm Link created successfully"))
-                    .buildFuture();
+                .success(new InitXpdrRdmLinksOutputBuilder().setResult("Xponder Roadm Link created successfully"))
+                .buildFuture();
         } else {
             return RpcResultBuilder.<InitXpdrRdmLinksOutput>failed().buildFuture();
         }
@@ -66,11 +128,11 @@ public class NetworkUtilsImpl implements NetworkutilsService {
 
     public Future<RpcResult<InitRdmXpdrLinksOutput>> initRdmXpdrLinks(InitRdmXpdrLinksInput input) {
         boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(),
-                openRoadmTopology,dataBroker);
+            openRoadmTopology, dataBroker);
         if (createRdmXpdrLinks) {
             return RpcResultBuilder
-                    .success(new InitRdmXpdrLinksOutputBuilder().setResult("Roadm Xponder links created successfully"))
-                    .buildFuture();
+                .success(new InitRdmXpdrLinksOutputBuilder().setResult("Roadm Xponder links created successfully"))
+                .buildFuture();
         } else {
             return RpcResultBuilder.<InitRdmXpdrLinksOutput>failed().buildFuture();
         }