@Override
  public StringSetMap configureZoning(
      Map<URI, List<List<StoragePort>>> portGroup,
      Map<String, Map<URI, Set<Initiator>>> initiatorGroup,
      Map<URI, NetworkLite> networkMap,
      StoragePortsAssigner assigner) {
    StringSetMap zoningMap = new StringSetMap();

    // Set up a map to track port usage so that we can use all ports more or less equally.
    Map<StoragePort, Integer> portAUsage = new HashMap<StoragePort, Integer>();
    Map<StoragePort, Integer> portBUsage = new HashMap<StoragePort, Integer>();

    // Iterate through each of the directors, matching each of its initiators
    // with one port.
    for (String director : initiatorGroup.keySet()) {
      for (URI networkURI : initiatorGroup.get(director).keySet()) {
        NetworkLite net = networkMap.get(networkURI);
        for (Initiator initiator : initiatorGroup.get(director).get(networkURI)) {
          // If there are no ports on the initiators network, too bad...
          if (portGroup.get(networkURI) == null) {
            _log.info(String.format("%s -> no ports in network", initiator.getInitiatorPort()));
            continue;
          }
          StringSet ports = new StringSet();
          // Get an A Port
          String aPortName = " ", bPortName = " ";
          StoragePort portA =
              VPlexBackEndOrchestratorUtil.assignPortToInitiator(
                  assigner,
                  portGroup.get(networkURI).iterator().next(),
                  net,
                  initiator,
                  portAUsage,
                  "SP_A");
          if (portA != null) {
            aPortName = portA.getPortName();
            ports.add(portA.getId().toString());
          }
          // Get a B Port
          StoragePort portB =
              VPlexBackEndOrchestratorUtil.assignPortToInitiator(
                  assigner,
                  portGroup.get(networkURI).iterator().next(),
                  net,
                  initiator,
                  portBUsage,
                  "SP_B");
          if (portB != null) {
            bPortName = portB.getPortName();
            ports.add(portB.getId().toString());
          }
          _log.info(
              String.format(
                  "%s %s   %s -> %s  %s",
                  director, net.getLabel(), initiator.getInitiatorPort(), aPortName, bPortName));
          zoningMap.put(initiator.getId().toString(), ports);
        }
      }
    }
    return zoningMap;
  }