Added support for fail-mode. 89/16789/3
authorEd Warnicke <eaw@cisco.com>
Wed, 18 Mar 2015 19:50:51 +0000 (14:50 -0500)
committerEd Warnicke <eaw@cisco.com>
Wed, 18 Mar 2015 20:43:15 +0000 (15:43 -0500)
Supports both write of fail-mode to config, and also
read of it from operational data-store.

Also updated postman collection

Change-Id: Ie730122f525e6747dfe5e765bd317b95775cd256
Signed-off-by: Ed Warnicke <eaw@cisco.com>
resources/commons/OVSDB_Southbound.postman_collection
southbound/southbound-api/src/main/yang/ovsdb.yang
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundConstants.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 b26acacaa7cd5715e9caa5d7009c8e9def6478d1..d63d04d19b5a7d0065dc6ac85cab1b923b1bea1f 100644 (file)
 {
-       "id": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
-       "name": "Ovsdb Southbound Collection",
-       "timestamp": 1424977469540,
-       "order": [
-               "25991d63-bce2-fd31-6504-c5602b0a7099",
-               "19541dee-f73c-ac03-ff4e-36d65a313624",
-               "2ee8a356-bfdb-7f09-40a6-4e471e4b9bc3",
-               "da0ea53d-ea33-c15f-5140-9eb339445ee1",
-               "b542ee70-45fd-824f-ab33-a5c3bae38d24",
-               "91d7a25c-13a7-486d-f23e-1e90c485d78e"
-       ],
-       "owner": 0,
-       "sharedWithTeam": false,
-       "synced": false,
-       "subscribed": false,
-       "hasRequests": true,
-       "requests": [
-               {
-                       "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
-                       "id": "19541dee-f73c-ac03-ff4e-36d65a313624",
-                       "name": "Get Operational Topology",
-                       "description": "",
-                       "url": "http://localhost:8080/restconf/operational/network-topology:network-topology/",
-                       "method": "GET",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\n",
-                       "data": [],
-                       "dataMode": "params",
-                       "timestamp": 0,
-                       "responses": [],
-                       "version": 2,
-                       "owner": 0,
-                       "preRequestScript": "",
-                       "tests": "",
-                       "synced": false
-               },
-               {
-                       "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
-                       "id": "25991d63-bce2-fd31-6504-c5602b0a7099",
-                       "name": "Create Specific Config OvsdbNode",
-                       "description": "",
-                       "url": "http://localhost:8080/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F127.0.0.1: 16640",
-                       "method": "PUT",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "data": [],
-                       "dataMode": "raw",
-                       "timestamp": 0,
-                       "version": 2,
-                       "time": 1425926377425,
-                       "owner": 0,
-                       "preRequestScript": "",
-                       "tests": "",
-                       "synced": false,
-                       "rawModeData": "{\n  \"network-topology:node\": [\n        {\n            \"node-id\": \"ovsdb:/127.0.0.1: 16640\",\n            \"ovsdb:port\": 16640,\n            \"ovsdb:ip\": \"127.0.0.1\"\n        }\n    ]\n}"
-               },
-               {
-                       "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
-                       "id": "2ee8a356-bfdb-7f09-40a6-4e471e4b9bc3",
-                       "name": "Create Specific Config Bridge",
-                       "description": "",
-                       "url": "http://localhost:8080/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F127.0.0.1:16640%2Fbridge%2Fbr02",
-                       "method": "PUT",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application/json\n",
-                       "data": [],
-                       "dataMode": "raw",
-                       "timestamp": 0,
-                       "version": 2,
-                       "time": 1426530506948,
-                       "owner": 0,
-                       "preRequestScript": "",
-                       "tests": "",
-                       "synced": false,
-                       "rawModeData": "{\n  \"network-topology:node\": [\n        {\n            \"node-id\": \"ovsdb://127.0.0.1:16640/bridge/br02\",\n             \"ovsdb:bridge-name\": \"br02\",\n             \"ovsdb:datapath-id\": \"00:00:b2:bf:48:25:f2:4b\",\n             \"ovsdb:protocol-entry\": [\n                {\n                  \"protocol\": \"ovsdb:ovsdb-bridge-protocol-openflow-13\"\n                }\n              ],\n              \"ovsdb:controller-entry\": [\n                {\n                  \"target\": \"tcp:127.0.0.1:6633\"\n                }\n              ],\n             \"ovsdb:managed-by\": \"/network-topology:network-topology/network-topology:topology[network-topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-id='ovsdb://127.0.0.1:16640']\"\n        }\n    ]\n}"
-               },
-               {
-                       "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
-                       "id": "91d7a25c-13a7-486d-f23e-1e90c485d78e",
-                       "name": "Get Specific Config OvsdbNode",
-                       "description": "",
-                       "url": "http://localhost:8080/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F127.0.0.1: 16640",
-                       "method": "GET",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\n",
-                       "data": [],
-                       "dataMode": "params",
-                       "timestamp": 0,
-                       "responses": [],
-                       "version": 2,
-                       "owner": 0,
-                       "preRequestScript": "",
-                       "tests": "",
-                       "synced": false
-               },
-               {
-                       "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
-                       "id": "b542ee70-45fd-824f-ab33-a5c3bae38d24",
-                       "name": "Get Config Topology",
-                       "description": "",
-                       "url": "http://localhost:8080/restconf/config/network-topology:network-topology/",
-                       "method": "GET",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\n",
-                       "data": [],
-                       "dataMode": "params",
-                       "timestamp": 0,
-                       "responses": [],
-                       "version": 2,
-                       "owner": 0,
-                       "preRequestScript": "",
-                       "tests": "",
-                       "synced": false
-               },
-               {
-                       "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
-                       "id": "da0ea53d-ea33-c15f-5140-9eb339445ee1",
-                       "name": "Delete Specific Config OvsdbNode",
-                       "description": "",
-                       "url": "http://localhost:8080/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F127.0.0.1: 16640",
-                       "method": "DELETE",
-                       "headers": "Authorization: Basic YWRtaW46YWRtaW4=\n",
-                       "data": [],
-                       "dataMode": "params",
-                       "timestamp": 0,
-                       "responses": [],
-                       "version": 2,
-                       "owner": 0,
-                       "preRequestScript": "",
-                       "tests": "",
-                       "synced": false
-               }
-       ]
-}
\ No newline at end of file
+  "id": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
+  "name": "Ovsdb Southbound Collection",
+  "timestamp": 1424977469540,
+  "order": [
+    "25991d63-bce2-fd31-6504-c5602b0a7099",
+    "19541dee-f73c-ac03-ff4e-36d65a313624",
+    "2ee8a356-bfdb-7f09-40a6-4e471e4b9bc3",
+    "da0ea53d-ea33-c15f-5140-9eb339445ee1",
+    "b542ee70-45fd-824f-ab33-a5c3bae38d24",
+    "91d7a25c-13a7-486d-f23e-1e90c485d78e"
+  ],
+  "requests": [
+    {
+      "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
+      "id": "19541dee-f73c-ac03-ff4e-36d65a313624",
+      "name": "Get Operational Topology",
+      "description": "",
+      "url": "http:\/\/localhost:8080\/restconf\/operational\/network-topology:network-topology\/",
+      "method": "GET",
+      "headers": "Authorization: Basic YWRtaW46YWRtaW4=\n",
+      "data": [
+
+      ],
+      "dataMode": "params",
+      "timestamp": 0,
+      "responses": [
+
+      ],
+      "version": 2
+    },
+    {
+      "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
+      "id": "25991d63-bce2-fd31-6504-c5602b0a7099",
+      "name": "Create Specific Config OvsdbNode",
+      "description": "",
+      "url": "http:\/\/localhost:8080\/restconf\/config\/network-topology:network-topology\/topology\/ovsdb:1\/node\/ovsdb:%2F127.0.0.1: 16640",
+      "method": "PUT",
+      "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application\/json\n",
+      "data": "{\n  \"network-topology:node\": [\n        {\n            \"node-id\": \"ovsdb:\/127.0.0.1: 16640\",\n            \"ovsdb:port\": 16640,\n            \"ovsdb:ip\": \"127.0.0.1\"\n        }\n    ]\n}",
+      "dataMode": "raw",
+      "timestamp": 0,
+      "version": 2,
+      "time": 1425926377425
+    },
+    {
+      "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
+      "id": "2ee8a356-bfdb-7f09-40a6-4e471e4b9bc3",
+      "name": "Create Specific Config Bridge",
+      "description": "",
+      "url": "http:\/\/localhost:8080\/restconf\/config\/network-topology:network-topology\/topology\/ovsdb:1\/node\/ovsdb:%2F%2F127.0.0.1:16640%2Fbridge%2Fbr02",
+      "method": "PUT",
+      "headers": "Authorization: Basic YWRtaW46YWRtaW4=\nContent-Type: application\/json\n",
+      "data": "{\n  \"network-topology:node\": [\n        {\n            \"node-id\": \"ovsdb:\/\/127.0.0.1:16640\/bridge\/br02\",\n             \"ovsdb:bridge-name\": \"br02\",\n             \"ovsdb:protocol-entry\": [\n                {\n                  \"protocol\": \"ovsdb:ovsdb-bridge-protocol-openflow-13\"\n                }\n              ],\n              \"ovsdb:controller-entry\": [\n                {\n                  \"target\": \"tcp:127.0.0.1:6633\"\n                }\n              ],\n              \"ovsdb:fail-mode\": \"ovsdb:ovsdb-fail-mode-secure\",\n             \"ovsdb:managed-by\": \"\/network-topology:network-topology\/network-topology:topology[network-topology:topology-id='ovsdb:1']\/network-topology:node[network-topology:node-id='ovsdb:\/\/127.0.0.1:16640']\"\n        }\n    ]\n}",
+      "dataMode": "raw",
+      "timestamp": 0,
+      "version": 2,
+      "time": 1426707526682
+    },
+    {
+      "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
+      "id": "91d7a25c-13a7-486d-f23e-1e90c485d78e",
+      "name": "Get Specific Config OvsdbNode",
+      "description": "",
+      "url": "http:\/\/localhost:8080\/restconf\/config\/network-topology:network-topology\/topology\/ovsdb:1\/node\/ovsdb:%2F127.0.0.1: 16640",
+      "method": "GET",
+      "headers": "Authorization: Basic YWRtaW46YWRtaW4=\n",
+      "data": [
+
+      ],
+      "dataMode": "params",
+      "timestamp": 0,
+      "responses": [
+
+      ],
+      "version": 2
+    },
+    {
+      "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
+      "id": "b542ee70-45fd-824f-ab33-a5c3bae38d24",
+      "name": "Get Config Topology",
+      "description": "",
+      "url": "http:\/\/localhost:8080\/restconf\/config\/network-topology:network-topology\/",
+      "method": "GET",
+      "headers": "Authorization: Basic YWRtaW46YWRtaW4=\n",
+      "data": [
+
+      ],
+      "dataMode": "params",
+      "timestamp": 0,
+      "responses": [
+
+      ],
+      "version": 2
+    },
+    {
+      "collectionId": "2e3d9bd8-1388-bf50-19bf-7eb4b06dbfb1",
+      "id": "da0ea53d-ea33-c15f-5140-9eb339445ee1",
+      "name": "Delete Specific Config OvsdbNode",
+      "description": "",
+      "url": "http:\/\/localhost:8080\/restconf\/config\/network-topology:network-topology\/topology\/ovsdb:1\/node\/ovsdb:%2F127.0.0.1: 16640",
+      "method": "DELETE",
+      "headers": "Authorization: Basic YWRtaW46YWRtaW4=\n",
+      "data": [
+
+      ],
+      "dataMode": "params",
+      "timestamp": 0,
+      "responses": [
+
+      ],
+      "version": 2
+    }
+  ]
+}
index a910d23006c7f3c5c7b12743b1f943a65baaf07d..f304e8cf8af1915a4d075750007863039aac73e0 100644 (file)
@@ -85,6 +85,20 @@ module ovsdb {
         base ovsdb-bridge-protocol-base;
     }
 
+    identity ovsdb-fail-mode-base {
+        description "Base identity for ovsdb-failmode";
+    }
+
+    identity ovsdb-fail-mode-standalone {
+        description "Identity for ovsdb-failmode standalone";
+        base ovsdb-fail-mode-base;
+    }
+
+    identity ovsdb-fail-mode-secure {
+        definition "Identity for ovsdb-failmode standalone";
+        base ovsdb-fail-mode-base;
+    }
+
     grouping ovsdb-bridge-attributes {
         leaf bridge-uuid {
             description "The unique identifier of the bridge";
@@ -119,6 +133,13 @@ module ovsdb {
             type datapath-id;
         }
 
+        leaf fail-mode {
+            description "Failmode of the bridge";
+            type identityref {
+                base ovsdb-fail-mode-base;
+            }
+        }
+
         leaf flow-node {
             description "Flow node corresponding to this bridge";
             type flow-node-ref;
index 51994e050fa744594857ddded446ae067eacb72e..39b6ce8725494dedea6fb4aaaa95449a42e0829a 100644 (file)
@@ -15,6 +15,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow13;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow14;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow15;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbFailModeBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbFailModeSecure;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbFailModeStandalone;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
 
 import com.google.common.collect.ImmutableBiMap;
@@ -33,4 +36,9 @@ public class SouthboundConstants {
             .put(OvsdbBridgeProtocolOpenflow14.class,"OpenFlow14")
             .put(OvsdbBridgeProtocolOpenflow15.class,"OpenFlow15")
             .build();
+    public static final ImmutableBiMap<Class<? extends OvsdbFailModeBase>,String> OVSDB_FAIL_MODE_MAP = new ImmutableBiMap.Builder<Class<? extends OvsdbFailModeBase>,String>()
+            .put(OvsdbFailModeStandalone.class,"standalone")
+            .put(OvsdbFailModeSecure.class,"secure")
+            .build();
+
 }
index 2838ef199577dcae2582ce09b7dfd5ee704e5e40..f24ca7c6ba295215f7facaa04f49ae126c1a728d 100644 (file)
@@ -20,6 +20,7 @@ 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.OpenVSwitch;
+import org.opendaylight.ovsdb.southbound.SouthboundConstants;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
 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;
@@ -48,8 +49,10 @@ public class BridgeCreateCommand implements TransactCommand {
             // Bridge part
             Bridge bridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class);
             bridge.setName(ovsdbManagedNode.getBridgeName().getValue());
-            String namedUuid = "Bridge_" + ovsdbManagedNode.getBridgeName().getValue();
-            bridge.setName(ovsdbManagedNode.getBridgeName().getValue());
+            if(ovsdbManagedNode.getFailMode() != null &&
+                    SouthboundConstants.OVSDB_FAIL_MODE_MAP.get(ovsdbManagedNode.getFailMode()) != null ) {
+                bridge.setFailMode(Sets.newHashSet(SouthboundConstants.OVSDB_FAIL_MODE_MAP.get(ovsdbManagedNode.getFailMode())));
+            }
             if(SouthboundMapper.createOvsdbBridgeProtocols(ovsdbManagedNode) != null
                     && SouthboundMapper.createOvsdbBridgeProtocols(ovsdbManagedNode).size() > 0){
                 bridge.setProtocols(SouthboundMapper.createOvsdbBridgeProtocols(ovsdbManagedNode));
index 745f8b32f224e3a2d0d367af25b26934c292e5b1..181a91ad9f3618aecadaaafacc512c1538c580d8 100644 (file)
@@ -1,11 +1,9 @@
 package org.opendaylight.ovsdb.southbound.transactions.md;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Set;
 
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
@@ -17,8 +15,8 @@ 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.southbound.OvsdbClientKey;
+import org.opendaylight.ovsdb.southbound.SouthboundConstants;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 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.OvsdbBridgeAugmentation;
@@ -28,8 +26,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
@@ -82,6 +78,14 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand {
                 if(!SouthboundMapper.createControllerEntries(bridge, updatedControllerRows).isEmpty()) {
                     ovsdbManagedNodeBuilder.setControllerEntry(SouthboundMapper.createControllerEntries(bridge, updatedControllerRows));
                 }
+
+                if(bridge.getFailModeColumn() != null &&
+                        bridge.getFailModeColumn().getData() != null &&
+                        !bridge.getFailModeColumn().getData().isEmpty()) {
+                    String[] failmodeArray = new String[bridge.getFailModeColumn().getData().size()];
+                    bridge.getFailModeColumn().getData().toArray(failmodeArray);
+                    ovsdbManagedNodeBuilder.setFailMode(SouthboundConstants.OVSDB_FAIL_MODE_MAP.inverse().get(failmodeArray[0]));
+                }
                 ovsdbManagedNodeBuilder.setManagedBy(new OvsdbNodeRef(nodePath));
                 managedNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbManagedNodeBuilder.build());