Enabled the use of opendaylight-iid as external_ids for bridges 82/17382/2
authorEd Warnicke <eaw@cisco.com>
Mon, 30 Mar 2015 17:59:13 +0000 (13:59 -0400)
committerEd Warnicke <eaw@cisco.com>
Mon, 30 Mar 2015 20:54:28 +0000 (16:54 -0400)
Change-Id: Ie95bedab4fc0bc367e0581a64c1084c807bd390c
Signed-off-by: Ed Warnicke <eaw@cisco.com>
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundConstants.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeCreateCommand.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java

index 28d3dc5025e89ea6a02fb4dd57f3f2b1434589cf..07ae9a043eb94a1c8a02aabd0dcc742170356645 100755 (executable)
@@ -85,4 +85,5 @@ public class SouthboundConstants {
             .put(DatapathTypeSystem.class,"system")
             .put(DatapathTypeNetdev.class,"netdev")
             .build();
+    public static final String IID_EXTERNAL_ID_KEY = "opendaylight-iid";
 }
index 280df813048444f8804a68940246337872b584b6..2ebbbc3b32e0d073887a95533feda8a40eb087e1 100644 (file)
@@ -32,8 +32,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeBase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeSystem;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase;
@@ -124,6 +124,27 @@ public class SouthboundMapper {
         return createInstanceIdentifier(createManagedNodeId(key, bridgeName));
     }
 
+    public static InstanceIdentifier<Node> createInstanceIdentifier(OvsdbClientKey key,Bridge bridge) {
+        String managedNodePathString = bridge
+                .getExternalIdsColumn()
+                .getData()
+                .get(SouthboundConstants.IID_EXTERNAL_ID_KEY);
+        InstanceIdentifier<Node> managedNodePath = null;
+        if (managedNodePathString != null) {
+            managedNodePath = (InstanceIdentifier<Node>) SouthboundUtil
+                    .deserializeInstanceIdentifier(managedNodePathString);
+        }
+        if (managedNodePath == null) {
+            managedNodePath = SouthboundMapper.createInstanceIdentifier(key,new OvsdbBridgeName(bridge.getName()));
+        }
+        return managedNodePath;
+    }
+
+    public static NodeId createManagedNodeId(InstanceIdentifier<Node> iid) {
+        NodeKey nodeKey = iid.firstKeyOf(Node.class, NodeKey.class);
+        return nodeKey.getNodeId();
+    }
+
     public static InstanceIdentifier<Node> createInstanceIdentifier(OvsdbClientKey key) {
         return createInstanceIdentifier(key.getIp(), key.getPort());
     }
index a43c129e37f604d7017bdc2de1a68d7ed879e012..37101f0f9dca8d1c99f4140f51fdf30969b34ddc 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
 import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
@@ -19,14 +20,15 @@ import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.schema.openvswitch.Controller;
+import org.opendaylight.ovsdb.schema.openvswitch.Interface;
 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
 import org.opendaylight.ovsdb.schema.openvswitch.Port;
-import org.opendaylight.ovsdb.schema.openvswitch.Interface;
 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
+import org.opendaylight.ovsdb.southbound.SouthboundUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeInternal;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeInternal;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -44,9 +46,11 @@ public class BridgeCreateCommand implements TransactCommand {
 
     @Override
     public void execute(TransactionBuilder transaction) {
-        Map<InstanceIdentifier<Node>, OvsdbBridgeAugmentation> created
-            = TransactUtils.extractOvsdbManagedNodeCreate(changes);
-        for (OvsdbBridgeAugmentation ovsdbManagedNode: created.values()) {
+        Map<InstanceIdentifier<Node>, OvsdbBridgeAugmentation> created =
+                TransactUtils.extractOvsdbManagedNodeCreate(changes);
+        for (Entry<InstanceIdentifier<Node>, OvsdbBridgeAugmentation> ovsdbManagedNodeEntry:
+            created.entrySet()) {
+            OvsdbBridgeAugmentation ovsdbManagedNode = ovsdbManagedNodeEntry.getValue();
             LOG.debug("Received request to create ovsdb bridge name: {} uuid: {}",
                         ovsdbManagedNode.getBridgeName(),
                         ovsdbManagedNode.getBridgeUuid());
@@ -91,6 +95,12 @@ public class BridgeCreateCommand implements TransactCommand {
             }
             bridge.setPorts(Sets.newHashSet(new UUID(portNamedUuid)));
 
+            // Set the iid external_id
+            Map<String,String> externalIds = new HashMap<String,String>();
+            externalIds.put(SouthboundConstants.IID_EXTERNAL_ID_KEY,
+                    SouthboundUtil.serializeInstanceIdentifier(ovsdbManagedNodeEntry.getKey()));
+            bridge.setExternalIds(externalIds);
+
             transaction.add(op.insert(bridge).withId(bridgeNamedUuid));
 
             // OpenVSwitchPart
index f5e4e1314b8b8b58c1cf03a767c2c865fe58e57e..3381fc2f40aabcff4476ef4c24b2138d45b9a259 100644 (file)
@@ -62,8 +62,8 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand {
             if (node.isPresent()) {
                 LOG.debug("Node {} is present",node);
                 NodeBuilder managedNodeBuilder = new NodeBuilder();
-                NodeId manageNodeId = SouthboundMapper.createManagedNodeId(getKey(),
-                        new OvsdbBridgeName(bridge.getName()));
+                InstanceIdentifier<Node> managedNodePath = SouthboundMapper.createInstanceIdentifier(getKey(),bridge);
+                NodeId manageNodeId = SouthboundMapper.createManagedNodeId(managedNodePath);
                 managedNodeBuilder.setNodeId(manageNodeId);
                 OvsdbBridgeAugmentationBuilder ovsdbManagedNodeBuilder = new OvsdbBridgeAugmentationBuilder();
                 ovsdbManagedNodeBuilder.setBridgeName(new OvsdbBridgeName(bridge.getName()));
@@ -95,8 +95,6 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand {
                 ovsdbManagedNodeBuilder.setManagedBy(new OvsdbNodeRef(nodePath));
                 managedNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbManagedNodeBuilder.build());
 
-                InstanceIdentifier<Node> managedNodePath = SouthboundMapper.createInstanceIdentifier(manageNodeId);
-
                 LOG.debug("Store managed node augmentation data {}",ovsdbManagedNodeBuilder.toString());
                 transaction.merge(LogicalDatastoreType.OPERATIONAL, managedNodePath, managedNodeBuilder.build());