/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.block;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;
import com.emc.storageos.db.client.model.ExportMask;
import com.emc.storageos.db.client.model.Initiator;
import com.emc.storageos.db.client.model.StoragePort;
import com.emc.storageos.db.client.model.StringSetMap;
import com.emc.storageos.db.common.VdcUtil;
import com.emc.storageos.util.DummyDbClient;
import com.emc.storageos.util.NetworkLite;
import com.emc.storageos.volumecontroller.placement.PortAllocatorTestContext;
import com.emc.storageos.volumecontroller.placement.StoragePortsAllocator;
import com.emc.storageos.volumecontroller.placement.StoragePortsAllocator.PortAllocationContext;
import com.emc.storageos.volumecontroller.placement.StoragePortsAllocatorTest;
import com.emc.storageos.volumecontroller.placement.StoragePortsAssigner;
import com.emc.storageos.volumecontroller.placement.StoragePortsAssignerFactory;
import com.emc.storageos.vplexcontroller.VPlexBackendManager;
/**
* Test program for VPlexXtremIOMaskingOrchestrator
*
* Execution setup:
* Required classpath: default classpath
* Required run directory: Directory containing test
* Required argument: -Dlog4j.configuration=log4j.properties
*
*/
public class VPlexXtremIOMaskingOrchestratorTest extends StoragePortsAllocatorTest {
private static final Log _log = LogFactory.getLog(VPlexXtremIOMaskingOrchestratorTest.class);
public static void main(String[] args) throws InterruptedException {
VdcUtil.setDbClient(new DummyDbClient());
PropertyConfigurator.configure("log4j.properties");
_log.info("Beginning logging");
PortAllocatorTestContext contextPrototype = new PortAllocatorTestContext();
StoragePortsAllocator.setContextPrototype(contextPrototype);
VplexXtremIOMaskingOrchestrator orca = new VplexXtremIOMaskingOrchestrator(null, null);
VPlexBackendManager bemgr = new VPlexBackendManager();
orca.setSimulation(true);
URI arrayURI = URI.create("vmaxArray");
Map<String, Set<String>> directorToInitiators = new HashMap<String, Set<String>>();
Map<String, URI> initiatorIdToNetwork = new HashMap<String, URI>();
Map<String, Initiator> initiatorMap = new HashMap<String, Initiator>();
PortAllocationContext context = null;
Map<URI, NetworkLite> networkMap = new HashMap<URI, NetworkLite>();
Map<URI, List<StoragePort>> allocatablePorts = new HashMap<URI, List<StoragePort>>();
URI varray1 = URI.create("varray1");
// single VPLEX Engine
/**
* Single VPLEX Engine (2 Directors)
* Single X-brick (2 SCs, 4 storage ports), 2 networks
* SC ports spread across networks
*/
context = getNet1Ports(networkMap, allocatablePorts);
context = getNet2Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net1", "net2", null);
Set<Map<String, Map<URI, Set<Initiator>>>> initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
// orca.getInitiatorGroups(directorToInitiators, initiatorIdToNetwork, initiatorMap);
int directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
Set<Map<URI, List<List<StoragePort>>>> portGroups = orca.getPortGroups(
allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
/**
* Single VPLEX Engine (2 Directors)
* Dual X-bricks (4 SCs, 8 storage ports), 2 networks
* ports spread across networks
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNet3Ports(networkMap, allocatablePorts);
context = getNet4Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net3", "net4", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
/**
* Single VPLEX Engine (2 Directors)
* Dual X-bricks (4 SCs, 8 storage ports), 2 networks
* network-1 has X-brick 1's ports; network-2 has X-brick 2's ports;
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNet5Ports(networkMap, allocatablePorts);
context = getNet6Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net5", "net6", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
/**
* Single VPLEX Engine (2 Directors)
* Quad X-bricks (8 SCs, 16 storage ports), 2 networks
* ports spread across networks
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNet7Ports(networkMap, allocatablePorts);
context = getNet8Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net7", "net8", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
/**
* Single VPLEX Engine (2 Directors)
* Dual X-bricks (4 SCs, 3 ports from X-brick 1, 3 ports from X-brick 2), 2 networks
* ports spread across networks with second network having only 2 ports
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNetAPorts(networkMap, allocatablePorts);
context = getNetBPorts(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"netA", "netB", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
// Dual VPLEX Engine
/**
* Dual VPLEX Engine (4 Directors)
* Single X-brick (2 SCs, 4 storage ports), 2 networks
* SC ports spread across networks
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNet1Ports(networkMap, allocatablePorts);
context = getNet2Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1DualEngines(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net1", "net2", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
/**
* Dual VPLEX Engine (4 Directors)
* Dual X-bricks (4 SCs, 8 storage ports), 2 networks
* ports spread across networks
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNet3Ports(networkMap, allocatablePorts);
context = getNet4Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1DualEngines(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net3", "net4", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
/**
* Dual VPLEX Engine (4 Directors)
* Quad X-bricks (8 SCs, 16 storage ports), 2 networks
* ports spread across networks
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNet7Ports(networkMap, allocatablePorts);
context = getNet8Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1DualEngines(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net7", "net8", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
// Quad VPLEX Engine
/**
* Quad VPLEX Engine (8 Directors)
* Single X-brick (2 SCs, 4 storage ports), 2 networks
* SC ports spread across networks
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNet1Ports(networkMap, allocatablePorts);
context = getNet2Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1QuadEngines(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net1", "net2", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
/**
* Quad VPLEX Engine (8 Directors)
* Dual X-bricks (4 SCs, 8 storage ports), 2 networks
* ports spread across networks
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNet3Ports(networkMap, allocatablePorts);
context = getNet4Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1QuadEngines(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net3", "net4", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
/**
* Quad VPLEX Engine (8 Directors)
* Quad X-bricks (8 SCs, 16 storage ports), 2 networks
* ports spread across networks
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
context = getNet7Ports(networkMap, allocatablePorts);
context = getNet8Ports(networkMap, allocatablePorts);
logNetworks(allocatablePorts);
getInitiatorsVplex154Clus1QuadEngines(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net7", "net8", null);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), null, null);
makeExportMasks(arrayURI, orca, portGroups, initiatorGroups, networkMap);
/**
* Switch affinity tests
*/
context.reinitialize();
networkMap.clear();
allocatablePorts.clear();
Map<URI, Map<String, List<StoragePort>>> portSwitchMap = new HashMap<URI, Map<String, List<StoragePort>>>();
PortAllocationContext context1 = getNet3PortsSA(networkMap, allocatablePorts, portSwitchMap);
PortAllocationContext context2 = getNet4PortsSA(networkMap, allocatablePorts, portSwitchMap);
Map<URI, PortAllocationContext> contextMap = new HashMap<URI, PortAllocationContext>();
contextMap.put(context1._initiatorNetwork.getId(), context1);
contextMap.put(context2._initiatorNetwork.getId(), context2);
logNetworks(allocatablePorts);
Map<URI, String> initiatorSwitchMap = new HashMap<URI, String>();
getInitiatorsVplex154Clus1DualEnginesSA(directorToInitiators, initiatorIdToNetwork, initiatorMap,
"net3SA", "net4SA", initiatorSwitchMap);
initiatorGroups =
bemgr.getInitiatorGroups("test", directorToInitiators, initiatorIdToNetwork, initiatorMap, false, true);
directorCount = bemgr.getVplexDirectorCount(initiatorGroups);
orca.setVplexDirectorCount(directorCount);
Map<URI, Map<String, Integer>> switchPortNumber = getSwitchToPortNumber(networkMap.keySet(), 2);
portGroups = orca.getPortGroups(allocatablePorts, networkMap, varray1, initiatorGroups.size(), switchPortNumber, contextMap);
makeExportMasksSA(arrayURI, orca, portGroups, initiatorGroups, networkMap, initiatorSwitchMap, portSwitchMap );
}
static Integer maskCounter = 1;
private static void makeExportMasks(URI arrayURI, VplexXtremIOMaskingOrchestrator orca,
Set<Map<URI, List<List<StoragePort>>>> portGroups,
Set<Map<String, Map<URI, Set<Initiator>>>> initiatorGroups,
Map<URI, NetworkLite> networkMap) {
// Iterate through the PortGroups generating zoning info and an ExportMask
Iterator<Map<String, Map<URI, Set<Initiator>>>> igIterator = initiatorGroups.iterator();
for (Map<URI, List<List<StoragePort>>> portGroup : portGroups) {
String maskName = "testMask" + maskCounter.toString();
maskCounter++;
_log.info("Generating ExportMask: " + maskName);
if (!igIterator.hasNext()) {
igIterator = initiatorGroups.iterator();
}
Map<String, Map<URI, Set<Initiator>>> initiatorGroup = igIterator.next();
StoragePortsAssigner assigner = StoragePortsAssignerFactory.getAssignerForZones("vmax", null);
StringSetMap zoningMap = orca.configureZoning(portGroup, initiatorGroup, networkMap, assigner, null, null, null);
VPlexBackendManager mgr = new VPlexBackendManager(null, null, null, null, null, URI.create("project"), URI.create("tenant"),
null, null);
ExportMask exportMask = mgr.generateExportMask(arrayURI, maskName, portGroup, initiatorGroup, zoningMap);
}
_log.info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
private static PortAllocationContext getNet1Ports(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "net1";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc1", "50:00:00:00:00:00:00:7E:00");
addPort(context, port, null);
ports.add(port);
port = createFCPort("X1-SC2:fc1", "50:00:00:00:00:00:00:7F:00");
addPort(context, port, null);
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
private static PortAllocationContext getNet2Ports(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "net2";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc2", "50:00:00:00:00:00:00:AE:00");
addPort(context, port, null);
ports.add(port);
port = createFCPort("X1-SC2:fc2", "50:00:00:00:00:00:00:AF:00");
addPort(context, port, null);
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
private static PortAllocationContext getNet3Ports(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "net3";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc1", "50:00:00:00:00:00:00:7E:00");
ports.add(port);
port = createFCPort("X1-SC2:fc1", "50:00:00:00:00:00:00:8E:00");
ports.add(port);
port = createFCPort("X2-SC1:fc1", "50:00:00:00:00:00:00:9E:00");
ports.add(port);
port = createFCPort("X2-SC2:fc1", "50:00:00:00:00:00:00:AE:00");
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
private static PortAllocationContext getNet4Ports(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "net4";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc2", "50:00:00:00:00:00:00:7F:00");
ports.add(port);
port = createFCPort("X1-SC2:fc2", "50:00:00:00:00:00:00:8F:00");
ports.add(port);
port = createFCPort("X2-SC1:fc2", "50:00:00:00:00:00:00:9F:00");
ports.add(port);
port = createFCPort("X2-SC2:fc2", "50:00:00:00:00:00:00:AF:00");
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
private static PortAllocationContext getNet5Ports(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "net5";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc1", "50:00:00:00:00:00:00:7E:00");
ports.add(port);
port = createFCPort("X1-SC1:fc2", "50:00:00:00:00:00:00:8E:00");
ports.add(port);
port = createFCPort("X1-SC2:fc1", "50:00:00:00:00:00:00:9E:00");
ports.add(port);
port = createFCPort("X1-SC2:fc2", "50:00:00:00:00:00:00:AE:00");
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
private static PortAllocationContext getNet6Ports(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "net6";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X2-SC1:fc1", "50:00:00:00:00:00:00:7F:00");
ports.add(port);
port = createFCPort("X2-SC1:fc2", "50:00:00:00:00:00:00:8F:00");
ports.add(port);
port = createFCPort("X2-SC2:fc1", "50:00:00:00:00:00:00:9F:00");
ports.add(port);
port = createFCPort("X2-SC2:fc2", "50:00:00:00:00:00:00:AF:00");
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
private static PortAllocationContext getNet7Ports(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "net7";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc1", "50:00:00:00:00:00:00:1E:00");
ports.add(port);
port = createFCPort("X1-SC2:fc1", "50:00:00:00:00:00:00:2E:00");
ports.add(port);
port = createFCPort("X2-SC1:fc1", "50:00:00:00:00:00:00:3E:00");
ports.add(port);
port = createFCPort("X2-SC2:fc1", "50:00:00:00:00:00:00:4E:00");
ports.add(port);
port = createFCPort("X3-SC1:fc1", "50:00:00:00:00:00:00:5E:00");
ports.add(port);
port = createFCPort("X3-SC2:fc1", "50:00:00:00:00:00:00:6E:00");
ports.add(port);
port = createFCPort("X4-SC1:fc1", "50:00:00:00:00:00:00:7E:00");
ports.add(port);
port = createFCPort("X4-SC2:fc1", "50:00:00:00:00:00:00:8E:00");
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
private static PortAllocationContext getNet8Ports(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "net8";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc2", "50:00:00:00:00:00:00:1F:00");
ports.add(port);
port = createFCPort("X1-SC2:fc2", "50:00:00:00:00:00:00:2F:00");
ports.add(port);
port = createFCPort("X2-SC1:fc2", "50:00:00:00:00:00:00:3F:00");
ports.add(port);
port = createFCPort("X2-SC2:fc2", "50:00:00:00:00:00:00:4F:00");
ports.add(port);
port = createFCPort("X3-SC1:fc2", "50:00:00:00:00:00:00:5F:00");
ports.add(port);
port = createFCPort("X3-SC2:fc2", "50:00:00:00:00:00:00:6F:00");
ports.add(port);
port = createFCPort("X4-SC1:fc2", "50:00:00:00:00:00:00:7F:00");
ports.add(port);
port = createFCPort("X4-SC2:fc2", "50:00:00:00:00:00:00:8F:00");
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
private static PortAllocationContext getNetAPorts(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "netA";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc1", "50:00:09:73:00:18:95:19");
ports.add(port);
port = createFCPort("X1-SC2:fc1", "50:00:09:73:00:18:95:1C");
ports.add(port);
port = createFCPort("X2-SC1:fc1", "50:00:09:73:00:18:95:1D");
ports.add(port);
port = createFCPort("X2-SC2:fc1", "50:00:09:73:00:18:95:5C");
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
private static PortAllocationContext getNetBPorts(Map<URI, NetworkLite> networkMap, Map<URI, List<StoragePort>> allocatablePorts) {
String label = "netB";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc2", "50:00:09:73:00:18:95:18");
ports.add(port);
port = createFCPort("X2-SC1:fc2", "50:00:09:73:00:18:95:21");
ports.add(port);
allocatablePorts.put(id, ports);
return context;
}
/**
* VPLEX Single Engine
*/
private static void getInitiatorsVplex154Clus1(
Map<String, Set<String>> directorToInitiators,
Map<String, URI> initiatorIdToNetwork,
Map<String, Initiator> initiatorMap, String net1, String net2, String net3) {
directorToInitiators.clear();
initiatorIdToNetwork.clear();
initiatorMap.clear();
if (net3 != null) {
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:13", net3);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:13", net3);
} else {
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:13", net2);
}
}
/**
* VPLEX Dual Engine
*/
private static void getInitiatorsVplex154Clus1DualEngines(
Map<String, Set<String>> directorToInitiators,
Map<String, URI> initiatorIdToNetwork,
Map<String, Initiator> initiatorMap, String net1, String net2, String net3) {
directorToInitiators.clear();
initiatorIdToNetwork.clear();
initiatorMap.clear();
if (net3 != null) {
} else {
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:13", net2);
}
}
/**
* VPLEX Quad Engine
*/
private static void getInitiatorsVplex154Clus1QuadEngines(
Map<String, Set<String>> directorToInitiators,
Map<String, URI> initiatorIdToNetwork,
Map<String, Initiator> initiatorMap, String net1, String net2, String net3) {
directorToInitiators.clear();
initiatorIdToNetwork.clear();
initiatorMap.clear();
if (net3 != null) {
} else {
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-3-1-A", "50:00:14:43:60:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-3-1-A", "50:00:14:43:60:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-3-1-A", "50:00:14:43:60:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-3-1-A", "50:00:14:43:60:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-3-1-B", "50:00:14:43:70:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-3-1-B", "50:00:14:43:70:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-3-1-B", "50:00:14:43:70:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-3-1-B", "50:00:14:43:70:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-4-1-A", "50:00:14:43:80:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-4-1-A", "50:00:14:43:80:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-4-1-A", "50:00:14:43:80:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-4-1-A", "50:00:14:43:80:7D:C4:13", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-4-1-B", "50:00:14:43:90:7D:C4:10", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-4-1-B", "50:00:14:43:90:7D:C4:11", net2);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-4-1-B", "50:00:14:43:90:7D:C4:12", net1);
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-4-1-B", "50:00:14:43:90:7D:C4:13", net2);
}
}
/**
* Add a VPlex initiator to the simulation.
*
* @param initiatorMap -- Map of id to initiators being generated.
* @param directorToInitiators -- Director to initiators map.
* @param netToInitiators -- Network to initiators map.
* @param director -- director id to be used.
* @param wwn
* @param net
*/
private static URI addInitiator(
Map<String, Initiator> initiatorMap,
Map<String, Set<String>> directorToInitiators,
Map<String, URI> initiatorIdToNetwork,
String director, String wwn, String net) {
Initiator initiator = new Initiator();
initiator.setId(URI.create(director + "-" + wwn));
initiator.setLabel(director + "-" + wwn);
initiator.setInitiatorPort(wwn);
initiatorMap.put(initiator.getId().toString(), initiator);
if (directorToInitiators.get(director) == null) {
directorToInitiators.put(director, new HashSet<String>());
}
URI netURI = URI.create(net);
directorToInitiators.get(director).add(initiator.getId().toString());
initiatorIdToNetwork.put(initiator.getId().toString(), netURI);
return initiator.getId();
}
private static void logNetworks(Map<URI, List<StoragePort>> allocatablePorts) {
for (URI netURI : allocatablePorts.keySet()) {
StringBuilder buf = new StringBuilder();
buf.append(netURI.toString() + " ports: ");
for (StoragePort port : allocatablePorts.get(netURI)) {
buf.append(port.getPortName() + " ");
}
_log.info(buf.toString());
;
}
}
private static PortAllocationContext getNet3PortsSA(Map<URI, NetworkLite> networkMap,
Map<URI, List<StoragePort>> allocatablePorts,
Map<URI, Map<String, List<StoragePort>>> portSwitchMap) {
String label = "net3SA";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
List<StoragePort> switchAPorts = new ArrayList<StoragePort>();
List<StoragePort> switchBPorts = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc1", "50:00:00:00:00:00:00:7E:00");
addPort(context, port, "mds-a");
ports.add(port);
switchAPorts.add(port);
port = createFCPort("X1-SC2:fc1", "50:00:00:00:00:00:00:8E:00");
addPort(context, port, "mds-a");
ports.add(port);
switchAPorts.add(port);
port = createFCPort("X2-SC1:fc1", "50:00:00:00:00:00:00:9E:00");
addPort(context, port, "mds-b");
ports.add(port);
switchBPorts.add(port);
port = createFCPort("X2-SC2:fc1", "50:00:00:00:00:00:00:AE:00");
addPort(context, port, "mds-b");
ports.add(port);
switchBPorts.add(port);
allocatablePorts.put(id, ports);
Map<String, List<StoragePort>>switchMap = new HashMap<String, List<StoragePort>>();
switchMap.put("mds-a", switchAPorts);
switchMap.put("mds-b", switchBPorts);
portSwitchMap.put(id, switchMap);
return context;
}
private static PortAllocationContext getNet4PortsSA(Map<URI, NetworkLite> networkMap,
Map<URI, List<StoragePort>> allocatablePorts,
Map<URI, Map<String, List<StoragePort>>> portSwitchMap) {
String label = "net4SA";
URI id = URI.create(label);
NetworkLite net = new NetworkLite(id, label);
networkMap.put(id, net);
PortAllocationContext context = new PortAllocationContext(net, label);
StoragePort port = null;
List<StoragePort> ports = new ArrayList<StoragePort>();
List<StoragePort> switchAPorts = new ArrayList<StoragePort>();
List<StoragePort> switchBPorts = new ArrayList<StoragePort>();
port = createFCPort("X1-SC1:fc2", "50:00:00:00:00:00:00:7F:00");
addPort(context, port, "mds-a");
ports.add(port);
switchAPorts.add(port);
port = createFCPort("X1-SC2:fc2", "50:00:00:00:00:00:00:8F:00");
addPort(context, port, "mds-a");
ports.add(port);
switchAPorts.add(port);
port = createFCPort("X2-SC1:fc2", "50:00:00:00:00:00:00:9F:00");
addPort(context, port, "mds-b");
ports.add(port);
switchBPorts.add(port);
port = createFCPort("X2-SC2:fc2", "50:00:00:00:00:00:00:AF:00");
addPort(context, port, "mds-b");
ports.add(port);
switchBPorts.add(port);
allocatablePorts.put(id, ports);
Map<String, List<StoragePort>>switchMap = new HashMap<String, List<StoragePort>>();
switchMap.put("mds-a", switchAPorts);
switchMap.put("mds-b", switchBPorts);
portSwitchMap.put(id, switchMap);
return context;
}
/**
* Switch affinity setup
* @param directorToInitiators
* @param initiatorIdToNetwork
* @param initiatorMap
* @param net1
* @param net2
* @param net3
*/
private static void getInitiatorsVplex154Clus1DualEnginesSA(
Map<String, Set<String>> directorToInitiators,
Map<String, URI> initiatorIdToNetwork,
Map<String, Initiator> initiatorMap, String net1, String net2,
Map<URI, String> initiatorSwitchMap) {
directorToInitiators.clear();
initiatorIdToNetwork.clear();
initiatorMap.clear();
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:10", net1, initiatorSwitchMap, "mds-a");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:11", net2, initiatorSwitchMap, "mds-a");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:12", net1, initiatorSwitchMap, "mds-a");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-A", "50:00:14:42:60:7D:C4:13", net2, initiatorSwitchMap, "mds-a");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:10", net1, initiatorSwitchMap, "mds-b");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:11", net2, initiatorSwitchMap, "mds-b");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:12", net1, initiatorSwitchMap, "mds-b");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-1-1-B", "50:00:14:42:70:7D:C4:13", net2, initiatorSwitchMap, "mds-b");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:10", net1, initiatorSwitchMap, "mds-a");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:11", net2, initiatorSwitchMap, "mds-a");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:12", net1, initiatorSwitchMap, "mds-a");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-A", "50:00:14:42:80:7D:C4:13", net2, initiatorSwitchMap, "mds-a");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:10", net1, initiatorSwitchMap, "mds-b");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:11", net2, initiatorSwitchMap, "mds-b");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:12", net1, initiatorSwitchMap, "mds-b");
addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, "director-2-1-B", "50:00:14:42:90:7D:C4:13", net2, initiatorSwitchMap, "mds-b");
}
/**
* Add initiator with switch info
* @param initiatorMap
* @param directorToInitiators
* @param initiatorIdToNetwork
* @param director
* @param wwn
* @param net
* @param initiatorSwitchMap OUTPUT initiatorId to switchName map
* @param switchName
*/
private static void addInitiator(
Map<String, Initiator> initiatorMap,
Map<String, Set<String>> directorToInitiators,
Map<String, URI> initiatorIdToNetwork,
String director, String wwn, String net,
Map<URI, String> initiatorSwitchMap,
String switchName) {
URI initiatorId = addInitiator(initiatorMap, directorToInitiators, initiatorIdToNetwork, director, wwn, net);
initiatorSwitchMap.put(initiatorId, switchName);
}
/**
* Make export masks with switch affinity
*
* @param arrayURI
* @param orca
* @param portGroups
* @param initiatorGroups
* @param networkMap
*/
private static void makeExportMasksSA(URI arrayURI, VplexXtremIOMaskingOrchestrator orca,
Set<Map<URI, List<List<StoragePort>>>> portGroups,
Set<Map<String, Map<URI, Set<Initiator>>>> initiatorGroups,
Map<URI, NetworkLite> networkMap,
Map<URI, String> initiatorSwitchMap,
Map<URI, Map<String, List<StoragePort>>>portSwitchMap) {
// Iterate through the PortGroups generating zoning info and an ExportMask
Iterator<Map<String, Map<URI, Set<Initiator>>>> igIterator = initiatorGroups.iterator();
for (Map<URI, List<List<StoragePort>>> portGroup : portGroups) {
String maskName = "testMask" + maskCounter.toString();
maskCounter++;
_log.info("Generating ExportMask: " + maskName);
if (!igIterator.hasNext()) {
igIterator = initiatorGroups.iterator();
}
Map<String, Map<URI, Set<Initiator>>> initiatorGroup = igIterator.next();
StoragePortsAssigner assigner = StoragePortsAssignerFactory.getAssignerForZones("vmax", null);
StringSetMap zoningMap = orca.configureZoning(portGroup, initiatorGroup, networkMap, assigner,
initiatorSwitchMap, portSwitchMap, VPlexVmaxMaskingOrchestratorTest.getPortSwitchNameMap(portSwitchMap));
VPlexBackendManager mgr = new VPlexBackendManager(null, null, null, null, null, URI.create("project"), URI.create("tenant"),
null, null);
ExportMask exportMask = mgr.generateExportMask(arrayURI, maskName, portGroup, initiatorGroup, zoningMap);
}
_log.info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
private static Map<URI, Map<String, Integer>> getSwitchToPortNumber(Collection<URI> networkList, Integer path) {
Map<URI, Map<String, Integer>> result = new HashMap<URI, Map<String, Integer>>();
for (URI net : networkList) {
Map<String, Integer> switchMap = new HashMap<String, Integer>();
switchMap.put("mds-a", path);
switchMap.put("mds-b", path);
result.put(net, switchMap);
}
return result;
}
}