Consolidate portmapping-topo for XPDR 93/82993/11
authorGilles Thouenon <gilles.thouenon@orange.com>
Wed, 26 Jun 2019 08:15:26 +0000 (10:15 +0200)
committerguillaume.lambert <guillaume.lambert@orange.com>
Thu, 1 Aug 2019 12:46:29 +0000 (14:46 +0200)
- add port-dir, port-qual, associated-lcp in XPDR portmapping
- for XPDR, associated-lcp depends on data of device/connection-map
- create XPDR node in openroadm-topology from its portmapping data only
(no longer from device data)
- add new tpce augmentation for node tps in openroadm-topology in order
to put associated-lcp info
- add yang file for transportpce augmentation

- deactivate E2E 2.2.1 functional tests in releng
  timelimit hit and test broken by YANG deviation support pb

JIRA: TRNSPRTPCE-109

Change-Id: I8482077cd1fdc25822f668c2b75769c9df95a70a
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Co-authored-by: Christophe Betoule <christophe.betoule@orange.com>
api/src/main/yang/transportpce-portmapping@2017-02-28.yang
common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion221.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmFactory.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology22.java
ordmodels/network/src/main/yang/transportpce-network-topology@2019-06-25.yang [new file with mode: 0644]
tox.ini

index 8c1b421df7203eeab9cffc76b604381ad121b236..8a6d14a24b866eeb00fb136d249f7b661d11938b 100644 (file)
@@ -77,6 +77,23 @@ module transportpce-portmapping {
           description
           "OTS interface provisioned on the port";
         }
+        leaf port-direction{
+          type string;
+          description
+            "Useful for line port of XPDR, for which there is no
+            indication in its logical-termination-point naming";
+        }
+        leaf port-qual{
+          type string;
+          description
+            "Useful to identify from portmapping client from network ports of XPDR";
+        }
+        leaf associated-lcp{
+          type string;
+          description
+            "For XPDR, associate two logical-connection-points
+            from device/connnection-map data";
+        }
       }
       list cp-to-degree{
         description
index b7e4c8f126624787926a5b7647baa168613268c6..fe3735335fcf870af1ee136766d0fb5c51946bea 100644 (file)
@@ -48,6 +48,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.degree.C
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.Interface;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.ConnectionMap;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.Degree;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.DegreeKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.Info;
@@ -188,6 +189,8 @@ public class PortMappingVersion221 {
             LOG.warn("Circuit Packs are not present for {}", nodeId);
             return false; // TODO return false or continue?
         }
+        Map<String, String> lcpMap = new HashMap();
+        Map<String, Mapping> mappingMap = new HashMap();
 
         List<CircuitPacks> circuitPackList = deviceObject.get().getCircuitPacks();
         circuitPackList.sort(Comparator.comparing(CircuitPack::getCircuitPackName));
@@ -198,23 +201,43 @@ public class PortMappingVersion221 {
                 LOG.warn("Ports were not found for circuit pack: {}", circuitPackName);
                 continue;
             }
-
-            for (Ports port : cp.getPorts()) {
-                if (port.getPortQual() == null) {
-                    continue;
-                }
-                if (PortQual.XpdrNetwork.getName().equals(port.getPortQual().getName()))  {
-                    portMapList.add(createMappingObject(nodeId, port, circuitPackName,
-                            "XPDR1-" + StringConstants.NETWORK_TOKEN + line));
+            List<Ports> portList = cp.getPorts();
+            portList.sort(Comparator.comparing(Ports::getPortName));
+            for (Ports port : portList) {
+                if (PortQual.XpdrNetwork.getName().equals(port.getPortQual().getName())) {
+                    String lcp = "XPDR1-" + StringConstants.NETWORK_TOKEN + line;
+                    lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp);
+                    mappingMap.put(lcp, createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null));
                     line++;
                 } else if (PortQual.XpdrClient.getName().equals(port.getPortQual().getName())) {
-                    portMapList.add(createMappingObject(nodeId, port, circuitPackName,
-                            "XPDR1-" + StringConstants.CLIENT_TOKEN + client));
+                    String lcp = "XPDR1-" + StringConstants.CLIENT_TOKEN + client;
+                    lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp);
+                    mappingMap.put(lcp, createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null));
                     client++;
                 } else {
                     LOG.warn("Not supported type of port! Port type: {}", port.getPortQual().getName());
                 }
-                LOG.info("portMapList Is {} {}",portMapList.size(),portMapList.get(0));
+                if (portMapList.size() == 0) {
+                    LOG.info("portMapList is empty");
+                } else {
+                    LOG.info("portMapList Is {} {}",portMapList.size(),portMapList.get(0));
+                }
+            }
+        }
+        List<ConnectionMap> connectionMap = deviceObject.get().getConnectionMap();
+        for (ConnectionMap cm : connectionMap) {
+            String skey = cm.getSource().getCircuitPackName() + "+" + cm.getSource().getPortName();
+            String slcp = lcpMap.get(skey);
+            String dkey = cm.getDestination().get(0).getCircuitPackName() + "+" + cm.getDestination().get(0)
+                .getPortName();
+            String dlcp = lcpMap.get(dkey);
+            Mapping mapping = mappingMap.get(slcp);
+            mappingMap.remove(slcp);
+            portMapList.add(createXpdrMappingObject(nodeId, null, null, null, mapping, dlcp));
+        }
+        if (!mappingMap.isEmpty()) {
+            for (Mapping m : mappingMap.values()) {
+                portMapList.add(m);
             }
         }
         return true;
@@ -472,7 +495,7 @@ public class PortMappingVersion221 {
     }
 
     private Mapping createMappingObject(String nodeId, Ports port, String circuitPackName,
-                                        String logicalConnectionPoint) {
+        String logicalConnectionPoint) {
         MappingBuilder mpBldr = new MappingBuilder();
         mpBldr.withKey(new MappingKey(logicalConnectionPoint)).setLogicalConnectionPoint(logicalConnectionPoint)
                 .setSupportingCircuitPackName(circuitPackName).setSupportingPort(port.getPortName());
@@ -506,6 +529,26 @@ public class PortMappingVersion221 {
         return mpBldr.build();
     }
 
+    private Mapping createXpdrMappingObject(String nodeId, Ports port, String circuitPackName,
+        String logicalConnectionPoint, Mapping mapping, String assoLcp) {
+        MappingBuilder mpBldr;
+        if (mapping != null && assoLcp != null) {
+            mpBldr = new MappingBuilder(mapping);
+            mpBldr.setAssociatedLcp(assoLcp);
+        } else {
+            mpBldr = new MappingBuilder();
+            mpBldr.withKey(new MappingKey(logicalConnectionPoint))
+                .setLogicalConnectionPoint(logicalConnectionPoint)
+                .setSupportingCircuitPackName(circuitPackName)
+                .setSupportingPort(port.getPortName())
+                .setPortDirection(port.getPortDirection().getName());
+            if (port.getPortQual() != null) {
+                mpBldr.setPortQual(port.getPortQual().getName());
+            }
+        }
+        return mpBldr.build();
+    }
+
     private boolean createTtpPortMapping(String nodeId, Info deviceInfo, List<Mapping> portMapList) {
         // Creating mapping data for degree TTP's
 
index 0863538c347034caffe1a3f4101db42dd0f5ed9c..2cccea98f8f3f87760fc3d3c67c03f85dfdeee14 100644 (file)
@@ -111,8 +111,8 @@ public class NetworkModelServiceImpl implements NetworkModelService {
             networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmNode, openRoadmNode,
                 CREATE_MISSING_PARENTS);
 
-
-            TopologyShard topologyShard = openRoadmFactory.createTopologyShardVersionControl(nodeId);
+            TopologyShard topologyShard =
+                openRoadmFactory.createTopologyShardVersionControl(portMapping.getNode(nodeId));
 
             if (topologyShard == null) {
                 LOG.error("Unable to create topology shard for node {}!", nodeId);
index 04b3705625d6f1d913c3e4952fe0bb3ccf6c42a0..c33ff0cafbea8d3f3866f26241ef8a061bbbbeb5 100644 (file)
@@ -7,10 +7,10 @@
  */
 package org.opendaylight.transportpce.networkmodel.util;
 
-import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.mapping.MappingUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.Nodes;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,14 +33,15 @@ public class OpenRoadmFactory {
 
     }
 
-    public TopologyShard createTopologyShardVersionControl(String nodeId) {
-        LOG.info("Create topology called for {}",nodeId);
-        switch (mappingUtils.getOpenRoadmVersion(nodeId)) {
-            case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1:
-                return openRoadmTopology121.createTopologyShard(nodeId);
-            case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1:
-                LOG.info("Creating openroadm topology v2.2 node for {}",nodeId);
-                return openRoadmTopology22.createTopologyShard(nodeId);
+    public TopologyShard createTopologyShardVersionControl(Nodes mappingNode) {
+        LOG.info("Create topology called for {} - version", mappingNode.getNodeId(),
+            mappingNode.getOpenroadmVersion().getName());
+        switch (mappingNode.getOpenroadmVersion().getName()) {
+            case "1.2.1":
+                return openRoadmTopology121.createTopologyShard(mappingNode.getNodeId());
+            case "2.2.1":
+                LOG.info("Creating openroadm topology v2.2 node for {}",mappingNode.getNodeId());
+                return openRoadmTopology22.createTopologyShard(mappingNode);
             default:
                 return null;
 
index f6f214403015a9cb742076f3e75fe6c79bab21c8..cf0ba1e764c44a5073f23998f156b1d5e6d37204 100644 (file)
@@ -23,6 +23,8 @@ import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.dto.NodeData;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.networks.network.network.types.OpenroadmCommonNetworkBuilder;
@@ -139,10 +141,11 @@ public class OpenRoadmTopology22 {
         return nwBuilder.build();
     }
 
-    public TopologyShard createTopologyShard(String nodeId) {
+    public TopologyShard createTopologyShard(Nodes mappingNode) {
         int numOfDegrees;
         int numOfSrgs;
         int portDirectionEnum = DEFAULT_PORT_DIRECTION;
+        String nodeId = mappingNode.getNodeId();
 
         InstanceIdentifier<Info> infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
         java.util.Optional<Info> deviceInfoOpt =
@@ -157,7 +160,7 @@ public class OpenRoadmTopology22 {
         }
         List<Node> nodes = new ArrayList<>();
         // Check if node is ROADM
-        if (NodeTypes.Rdm.getName().equals(deviceInfo.getNodeType().getName())) {
+        if (NodeTypes.Rdm.getName().equals(mappingNode.getNodeType().getName())) {
 
             /*
              * Adding Degree Node Get Degree Number -> x then get connection ports then find the port directions
@@ -222,22 +225,12 @@ public class OpenRoadmTopology22 {
             links.addAll(createAddDropLinks(nodeId, numOfDegrees, numOfSrgs, portDirectionEnum));
             LOG.info("created nodes/links: {}/{}", nodes.size(), links.size());
             return new TopologyShard(nodes, links);
-        } else if (NodeTypes.Xpdr.getName().equals(deviceInfo.getNodeType().getName())) {
+        } else if (NodeTypes.Xpdr.getName().equals(mappingNode.getNodeType().getName())) {
             // Check if node is XPONDER
-            Integer clientport = getNoOfClientPorts(nodeId);
+            LOG.info("creating xpdr node in openroadmtopology for node {}", mappingNode.getNodeId());
+            NodeBuilder ietfNode = createXpdr(mappingNode);
+            nodes.add(ietfNode.build());
             List<Link> links = new ArrayList<>();
-            Integer clientCounter = 1;
-            Integer lineCounter = 1;
-            while (clientCounter <= clientport) {
-                NodeBuilder tempNode = createXpdr(clientCounter, lineCounter, nodeId);
-                if (tempNode == null) {
-                    break;
-                }
-                nodes.add(tempNode.build());
-                clientCounter++;
-                lineCounter++;
-                LOG.info("Entered this loop");
-            }
             return new TopologyShard(nodes, links);
         }
         LOG.error("Device node Type not managed yet");
@@ -281,52 +274,63 @@ public class OpenRoadmTopology22 {
         return client;
     }
 
-    private NodeBuilder createXpdr(Integer clientCounter, Integer lineCounter, String nodeId) {
-        // Create a generic Topo Layer node
-        NodeBuilder nodebldr = createTopoLayerNode(nodeId);
-        // Create augmentation node to inorder to add degree
-        Node1Builder node1bldr = new Node1Builder();
-        TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder();
-        TerminationPointBuilder tempTpBldr;
-
-        // set node type to Xponder
-        node1bldr.setNodeType(OpenroadmNodeType.XPONDER);
+    private NodeBuilder createXpdr(Nodes mappingNode) {
+        // Create ietf node setting supporting-node data
+        NodeBuilder ietfNodeBldr = createTopoLayerNode(mappingNode.getNodeId());
+        // set node-id
+        String nodeIdtopo = new StringBuilder().append(mappingNode.getNodeId()).append("-XPDR1").toString();
+        ietfNodeBldr.setNodeId(new NodeId(nodeIdtopo));
+        ietfNodeBldr.withKey((new NodeKey(new NodeId(nodeIdtopo))));
+        // Create openroadm-network-topo augmentation to set node type to Xponder
+        Node1Builder ontNode1Bldr = new Node1Builder();
+        ontNode1Bldr.setNodeType(OpenroadmNodeType.XPONDER);
+        ietfNodeBldr.addAugmentation(Node1.class, ontNode1Bldr.build());
+
+        // Create tp-list
         List<TerminationPoint> tpList = new ArrayList<>();
-        String nodeIdtopo = new StringBuilder().append(nodeId).append("-XPDR1").toString();
-        // Ad degree node specific augmentation
-        nodebldr.setNodeId(new NodeId(nodeIdtopo));
-        nodebldr.withKey((new NodeKey(new NodeId(nodeIdtopo))));
-        nodebldr.addAugmentation(Node1.class, node1bldr.build());
-        while (clientCounter != 0) {
-            // Create CLNT-TX termination
-            tempTpBldr = createTpBldr("XPDR1-CLIENT" + clientCounter);
-            tp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT);
-            XpdrClientAttributesBuilder xpdrClntBldr = new XpdrClientAttributesBuilder();
-            xpdrClntBldr.setTailEquipmentId("XPDR1-NETWORK" + clientCounter);
-            tp1Bldr.setXpdrClientAttributes(xpdrClntBldr.build());
-            tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
-            tpList.add(tempTpBldr.build());
-            clientCounter--; }
-        while (lineCounter != 0) {
-            // Create LINE-TX termination
-            tempTpBldr = (createTpBldr("XPDR1-NETWORK" + lineCounter));
-            tp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK);
-            XpdrNetworkAttributesBuilder xpdrNwAttrBldr = new XpdrNetworkAttributesBuilder();
-            xpdrNwAttrBldr.setTailEquipmentId("XPDR1-CLIENT" + lineCounter);
-            tp1Bldr.setXpdrNetworkAttributes(xpdrNwAttrBldr.build());
-            tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
-            tpList.add(tempTpBldr.build());
-            lineCounter--; }
-        LOG.info("printing tpList {}",tpList);
+        TerminationPointBuilder ietfTpBldr;
+        for (Mapping m : mappingNode.getMapping()) {
+            ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint());
+            // Add openroadm-network-topology tp augmentations
+            TerminationPoint1Builder ontTp1Bldr = new TerminationPoint1Builder();
+            if (m.getPortQual().equals("xpdr-network")) {
+                ontTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK);
+                XpdrNetworkAttributesBuilder xpdrNwAttrBldr = new XpdrNetworkAttributesBuilder();
+                xpdrNwAttrBldr.setTailEquipmentId(m.getAssociatedLcp());
+                ontTp1Bldr.setXpdrNetworkAttributes(xpdrNwAttrBldr.build());
+                ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build());
+                org.opendaylight.yang.gen.v1.http.transportpce.topology.rev190625
+                    .TerminationPoint1Builder tpceTp1Bldr = new org.opendaylight.yang.gen.v1.http.transportpce
+                    .topology.rev190625.TerminationPoint1Builder();
+                tpceTp1Bldr.setAssociatedConnectionMapPort(m.getAssociatedLcp());
+                ietfTpBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev190625
+                    .TerminationPoint1.class, tpceTp1Bldr.build());
+                tpList.add(ietfTpBldr.build());
+            } else if (m.getPortQual().equals("xpdr-client")) {
+                ontTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT);
+                XpdrClientAttributesBuilder xpdrNwAttrBldr = new XpdrClientAttributesBuilder();
+                xpdrNwAttrBldr.setTailEquipmentId(m.getAssociatedLcp());
+                ontTp1Bldr.setXpdrClientAttributes(xpdrNwAttrBldr.build());
+                ietfTpBldr.addAugmentation(TerminationPoint1.class, ontTp1Bldr.build());
+                org.opendaylight.yang.gen.v1.http.transportpce.topology.rev190625
+                    .TerminationPoint1Builder tpceTp1Bldr = new org.opendaylight.yang.gen.v1.http.transportpce
+                    .topology.rev190625.TerminationPoint1Builder();
+                tpceTp1Bldr.setAssociatedConnectionMapPort(m.getAssociatedLcp());
+                ietfTpBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev190625
+                    .TerminationPoint1.class, tpceTp1Bldr.build());
+                tpList.add(ietfTpBldr.build());
+            }
+        }
+
+        // Create ietf node augmentation to support ietf tp-list
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
-                .Node1Builder tpNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-                .ietf.network.topology.rev180226.Node1Builder();
-        tpNode1.setTerminationPoint(tpList);
-        nodebldr.addAugmentation(
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class,
-                tpNode1.build());
-        LOG.info("The nodebldr {}",nodebldr);
-        return nodebldr;
+            .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
+            .rev180226.Node1Builder();
+        ietfNode1.setTerminationPoint(tpList);
+        ietfNodeBldr.addAugmentation(
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class,
+            ietfNode1.build());
+        return ietfNodeBldr;
     }
 
 
diff --git a/ordmodels/network/src/main/yang/transportpce-network-topology@2019-06-25.yang b/ordmodels/network/src/main/yang/transportpce-network-topology@2019-06-25.yang
new file mode 100644 (file)
index 0000000..bf817cc
--- /dev/null
@@ -0,0 +1,39 @@
+module transportpce-topology {
+    namespace "http://transportpce/topology";
+    prefix "tpce-topo";
+
+    import ietf-network {
+        prefix nd;
+        revision-date 2018-02-26;
+      }
+    import ietf-network-topology {
+        prefix nwt;
+        revision-date 2018-02-26;
+      }
+    import org-openroadm-common-network {
+        prefix cnet;
+        revision-date 2018-11-30;
+      }
+
+    organization
+        "TransportPCE team";
+      contact
+        "TransportPCE team";
+
+    revision 2019-06-25 {
+        description "Initial revision";
+    }
+
+    augment "/nd:networks/nd:network/nd:node/nwt:termination-point" {
+        when "../../nd:network-types/cnet:openroadm-common-network/openroadm-topology";
+        description
+          "Defines associated logical-connection-point for XPDR port.";
+        leaf associated-connection-map-port {
+          when
+            "../cnet:tp-type = 'XPONDER-CLIENT' or ../cnet:tp-type = 'XPONDER-NETWORK'";
+          type string;
+          description
+            "The xpdr port connectable regarding the device connection-map";
+        }
+      }
+}
\ No newline at end of file
diff --git a/tox.ini b/tox.ini
index f9166c80fa2db014139c895f8941a1d707ac2a9a..e3474af59cbaa3a132a21ed4f410aed840145d67 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -26,13 +26,13 @@ commands =
   {py27,rspn}: nosetests --with-xunit transportpce_tests/1.2.1/test_renderer_service_path_nominal.py
   {py27,pce}: nosetests --with-xunit transportpce_tests/1.2.1/test_pce.py
   {py27,olm}: nosetests --with-xunit transportpce_tests/1.2.1/test_olm.py
-  #{py27,end2end}: - nosetests --with-xunit transportpce_tests/1.2.1/test_end2end.py
+  {end2end}: - nosetests --with-xunit transportpce_tests/1.2.1/test_end2end.py
   {py27,portmapping221,rspn221,topology221,olm221,end2end221}: - ./buildHoneynode.sh 2.2.1
   {py27,portmapping221}: nosetests --with-xunit transportpce_tests/2.2.1/test_portmapping.py
   {py27,topology221}: nosetests --with-xunit transportpce_tests/2.2.1/test_topology.py
   {py27,rspn221}: nosetests --with-xunit transportpce_tests/2.2.1/test_renderer_service_path_nominal.py
   {py27,olm221}: nosetests --with-xunit transportpce_tests/2.2.1/test_olm.py
-  {py27,end2end221}: - nosetests --with-xunit transportpce_tests/2.2.1/test_end2end.py
+  {end2end221}: - nosetests --with-xunit transportpce_tests/2.2.1/test_end2end.py
   #{gnpy}: - sudo docker pull atriki/gnpyrest:v1.1
   {gnpy}: - sudo docker run -d -p 8008:5000 --name gnpy_tpce_rest1 atriki/gnpyrest:v1.1
   {gnpy}: nosetests --with-xunit transportpce_tests/1.2.1/test_gnpy.py