Copy physical network from config to operational 06/32206/1
authorGary Wu <gary.wu1@huawei.com>
Thu, 7 Jan 2016 00:38:47 +0000 (16:38 -0800)
committerGary Wu <gary.wu1@huawei.com>
Thu, 7 Jan 2016 00:38:47 +0000 (16:38 -0800)
Add utility function to copy physical network
structure from config datastore to operational.

Change-Id: Iee30309d56f7c8d5430783faea5c27ade93415b6
Signed-off-by: Gary Wu <gary.wu1@huawei.com>
nemo-impl/src/main/java/org/opendaylight/nemo/intent/IntentResolverUtils.java

index 95280cd35a5b032a0f22fd39627a81dceb31b660..ffd1810aaeaead9ffec9848b514f9d677ac0f3ae 100644 (file)
@@ -8,12 +8,24 @@
 \r
 package org.opendaylight.nemo.intent;\r
 \r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.ExecutionException;\r
+\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;\r
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.PhysicalNetwork;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.IntentVnMappingResult;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResource;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ConnectionId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.IntentId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ObjectId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.PropertyName;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalHostId;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalNodeId;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNodeId;\r
@@ -22,15 +34,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.int
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.SubNode;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.StringValue;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;\r
 import org.opendaylight.yangtools.yang.binding.DataObject;\r
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
 \r
-import java.util.ArrayList;\r
-import java.util.List;\r
+import com.google.common.base.Optional;\r
 \r
 /**\r
  * Implement the common utilities frequently used in\r
@@ -39,6 +50,9 @@ import java.util.List;
  * @author Zhigang Ji\r
  */\r
 public class IntentResolverUtils {\r
+\r
+    private static final Logger LOG = LoggerFactory.getLogger(IntentResolverUtils.class);\r
+\r
     /**\r
      * Check whether the node is an external layer2 group or layer3 group.\r
      *\r
@@ -454,4 +468,39 @@ public class IntentResolverUtils {
 \r
         return null;\r
     }\r
+\r
+\r
+    public static void copyPhysicalNetworkConfigToOperational(DataBroker dataBroker) {\r
+        final InstanceIdentifier<PhysicalNetwork> physicalNetworkIid = InstanceIdentifier\r
+                .builder(PhysicalNetwork.class).build();\r
+\r
+        final ReadWriteTransaction txn = dataBroker.newReadWriteTransaction();\r
+\r
+        try {\r
+            final Optional<PhysicalNetwork> oper = txn.read(LogicalDatastoreType.OPERATIONAL, physicalNetworkIid).get();\r
+\r
+            if (oper.isPresent()) {\r
+                txn.cancel();\r
+                LOG.info("Physical network already exists in operational");\r
+            } else {\r
+                final Optional<PhysicalNetwork> config = txn.read(LogicalDatastoreType.CONFIGURATION,\r
+                        physicalNetworkIid).get();\r
+\r
+                if (config.isPresent()) {\r
+                    txn.put(LogicalDatastoreType.OPERATIONAL, physicalNetworkIid, config.get());\r
+                    txn.submit().get();\r
+                    LOG.info("Copied physical network from config to operational");\r
+                } else {\r
+                    txn.cancel();\r
+                    LOG.info("No physical network found in config; none copied to operational");\r
+                }\r
+            }\r
+        } catch (InterruptedException exception) {\r
+            LOG.error("Cannot copy the physical hosts.", exception);\r
+        } catch (ExecutionException exception) {\r
+            LOG.error("Cannot copy the physical hosts.", exception);\r
+        }\r
+\r
+    }\r
+\r
 }\r