Added external_id bridgeDom support for ovsdb
authorBrent Salisbury <brent.salisbury@gmail.com>
Tue, 22 Oct 2013 21:02:51 +0000 (17:02 -0400)
committerBrent Salisbury <brent.salisbury@gmail.com>
Wed, 23 Oct 2013 18:13:30 +0000 (14:13 -0400)
Applied patch from Madhu. Thanks.

Added a column entries to get review
for needing a generic parameter for
set <table> <column> <param>.
Junit will update the external_id column in
the Bridge table. The method will be modified
to accept columns as opposed to
"external_id" only. Netty branch addresses
this with POJOs but this is for current
functionality.

Signed-off-by: Brent Salisbury <brent.salisbury@gmail.com>
Change-Id: Iba1913a91dea258541d16ca348179bc541a7422f

ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConfigurationService.java
ovsdb/src/test/java/org/opendaylight/ovsdb/OvsdbTestBridgeConfig.java [new file with mode: 0644]

index cf3385030bb794945d57f8057cccc7c048b833c6..fd79beffe93453d4a0b8e5b72e6cc1ff92c8cd6f 100755 (executable)
@@ -368,21 +368,72 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService,
     }
 
     @Override
-    public Status addBridgeDomainConfig(Node node, String bridgeIdentfier,
-            Map<ConfigConstants, Object> configs) {
-        String mgmt = (String)configs.get(ConfigConstants.MGMT);
-        if (mgmt != null) {
-            try {
-                if (setManager(node, mgmt)) return new Status(StatusCode.SUCCESS);
-            } catch (Throwable e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-                return new Status(StatusCode.INTERNALERROR);
+    public Status addBridgeDomainConfig(Node node, String bridgeIdentifier,
+                                        Map<ConfigConstants, Object> configs) {
+        try{
+            if (connectionService == null) {
+                logger.error("Couldn't refer to the ConnectionService");
+                return new Status(StatusCode.NOSERVICE);
+            }
+            Connection connection = this.getConnection(node);
+            if (connection == null || connection.getSocket() == null) {
+                return new Status(StatusCode.NOSERVICE);
+            }
+            if (connection != null) {
+
+                Map<String, OVSBridge> existingBridges = OVSBridge.monitorBridge(connection);
+                OVSBridge bridge = existingBridges.get(bridgeIdentifier);
+
+                ArrayList totalColumn = new ArrayList();
+                Map<String, String> columnPairs = (Map<String, String>) configs.get(ConfigConstants.CUSTOM);
+                if (columnPairs == null) {
+                    return new Status(StatusCode.NOTACCEPTABLE);
+                }
+                int num = columnPairs.size();
+                ArrayList columnArray = new ArrayList();
+                for(String key : columnPairs.keySet())
+                {
+                    ArrayList arg = new ArrayList<String>();
+                    arg.add(key);
+                    arg.add(columnPairs.get(key));
+                    columnArray.add(arg);
+                }
+
+                Map outterbr = new LinkedHashMap();
+                Map brcolumn = new LinkedHashMap();
+                ArrayList brlist1 = new ArrayList();
+                ArrayList brlist2 = new ArrayList();
+                ArrayList brlist3 = new ArrayList();
+                ArrayList brlist4 = new ArrayList();
+                ArrayList brlist5 = new ArrayList();
+                //Bridge Table set w/the extIdValue
+                outterbr.put("table", "Bridge");
+                brlist1.add(brlist2);
+                brlist2.add(brlist3);
+                brlist3.add("_uuid");
+                brlist3.add("==");
+                brlist3.add(brlist4);
+                brlist4.add("uuid");
+                brlist4.add(bridge.getUuid());
+                outterbr.put("where", brlist2);
+                outterbr.put("op", "update");
+                outterbr.put("row", brcolumn);
+                brcolumn.put("external_ids", brlist5);
+                brlist5.add("map");
+                brlist5.add(columnArray);
+
+                Object[] params = {"Open_vSwitch",outterbr};
+                OvsdbMessage msg = new OvsdbMessage("transact", params);
+                connection.sendMessage(msg);
+
             }
+        }catch(Exception e){
+            e.printStackTrace();
         }
-        return new Status(StatusCode.BADREQUEST);
+        return new Status(StatusCode.SUCCESS);
     }
 
+
     @Override
     public Status addPortConfig(Node node, String bridgeIdentifier, String portIdentifier,
             Map<ConfigConstants, Object> configs) {
diff --git a/ovsdb/src/test/java/org/opendaylight/ovsdb/OvsdbTestBridgeConfig.java b/ovsdb/src/test/java/org/opendaylight/ovsdb/OvsdbTestBridgeConfig.java
new file mode 100644 (file)
index 0000000..523b318
--- /dev/null
@@ -0,0 +1,50 @@
+package org.opendaylight.ovsdb;
+
+import org.junit.Test;
+import org.opendaylight.controller.sal.connection.ConnectionConstants;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.networkconfig.bridgedomain.ConfigConstants;
+import org.opendaylight.ovsdb.internal.ConfigurationService;
+import org.opendaylight.ovsdb.internal.ConnectionService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class OvsdbTestBridgeConfig {
+    private static final Logger logger = LoggerFactory
+            .getLogger(OvsdbTestSetManager.class);
+
+    @Test
+    public void setBridgeConfig() throws Throwable{
+        Node.NodeIDType.registerIDType("OVS", String.class);
+        NodeConnector.NodeConnectorIDType.registerIDType("OVS", String.class, "OVS");
+
+        ConnectionService connectionService = new ConnectionService();
+        connectionService.init();
+        String identifier = "TEST";
+        Map<ConnectionConstants, String> params = new HashMap<ConnectionConstants, String>();
+        params.put(ConnectionConstants.ADDRESS, "192.168.254.128");
+        params.put(ConnectionConstants.PORT, "6640");
+
+        Map<ConfigConstants, Object> configs = new HashMap<ConfigConstants, Object>();
+
+        Map<String, String> exterIDPairs = new HashMap<String, String>();
+        exterIDPairs.put("bridge-foo", "bri-bar");
+        //Will accept multiple array pairs. Pairs must be arrays not maps.
+        configs.put(ConfigConstants.CUSTOM, exterIDPairs);
+
+        Node node = connectionService.connect(identifier, params);
+        if(node == null){
+            logger.error("Could not connect to ovsdb server");
+            return;
+        }
+
+        ConfigurationService configurationService = new ConfigurationService();
+        configurationService.setConnectionServiceInternal(connectionService);
+        configurationService.addBridgeDomainConfig(node, "br0", configs);
+    }
+
+}
\ No newline at end of file