From: Brent Salisbury Date: Tue, 22 Oct 2013 21:02:51 +0000 (-0400) Subject: Added external_id bridgeDom support for ovsdb X-Git-Tag: release/beryllium-sr2~1330 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=2c58aed099a7c7a69fba0ec8917ed14d03d8b5cc;p=netvirt.git Added external_id bridgeDom support for ovsdb Applied patch from Madhu. Thanks. Added a column entries to get review for needing a generic parameter for set . 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 Change-Id: Iba1913a91dea258541d16ca348179bc541a7422f --- diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConfigurationService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConfigurationService.java index cf3385030b..fd79beffe9 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConfigurationService.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConfigurationService.java @@ -368,21 +368,72 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, } @Override - public Status addBridgeDomainConfig(Node node, String bridgeIdentfier, - Map 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 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 existingBridges = OVSBridge.monitorBridge(connection); + OVSBridge bridge = existingBridges.get(bridgeIdentifier); + + ArrayList totalColumn = new ArrayList(); + Map columnPairs = (Map) 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(); + 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 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 index 0000000000..523b31851e --- /dev/null +++ b/ovsdb/src/test/java/org/opendaylight/ovsdb/OvsdbTestBridgeConfig.java @@ -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 params = new HashMap(); + params.put(ConnectionConstants.ADDRESS, "192.168.254.128"); + params.put(ConnectionConstants.PORT, "6640"); + + Map configs = new HashMap(); + + Map exterIDPairs = new HashMap(); + 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