Create a script to generate a Topology 19/7819/2
authordemx8as6 <martin.skorupski@highstreet-technologies.com>
Tue, 22 Feb 2022 11:51:20 +0000 (12:51 +0100)
committerMartin Skorupski <martin.skorupski@highstreet-technologies.com>
Thu, 24 Feb 2022 09:11:19 +0000 (09:11 +0000)
- add tapi node generation for CEPs

Issue-ID: OAM-249
Change-Id: I905c35a3d3fe0372347017b7ed3ace453710098a
Signed-off-by: demx8as6 <martin.skorupski@highstreet-technologies.com>
code/network-topology-instance-generator/model/python/tapi_connection_edge_point.py [new file with mode: 0644]

diff --git a/code/network-topology-instance-generator/model/python/tapi_connection_edge_point.py b/code/network-topology-instance-generator/model/python/tapi_connection_edge_point.py
new file mode 100644 (file)
index 0000000..25a0370
--- /dev/null
@@ -0,0 +1,160 @@
+# Copyright 2022 highstreet technologies GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#!/usr/bin/python
+"""
+Module containing a class representing a TAPI Connection Node Edge Point
+"""
+import uuid
+from typing import Dict, Union
+from lxml import etree
+from model.python.svg.connection_edge_point import ConnectionEdgePoint
+from model.python.svg.svg import Svg
+from model.python.top import Top
+
+
+class TapiConnectionEdgePoint(Top):
+    """
+    Class representing a TAPI Connection Node Edge Point object
+    """
+
+    __data: Dict = {}
+    __configuration = {
+        "protocol": "unknown",
+        "role": "consumer",
+        "parent": {
+            "node": "unknown",
+            "node-edge-point": "unknown",
+            "interface": "unknown"
+        }
+    }
+
+    # constructor
+    def __init__(self, configuration: Dict[str, str]):
+        super().__init__(configuration)
+        self.__configuration = configuration
+        self.__data = {
+            "uuid": str(uuid.uuid4()),
+            "name": [{
+                "value-name": "connection-edge-point-name",
+                "value": self.name()
+            }],
+            "operational-state": "ENABLED",
+            "lifecycle-state": "INSTALLED",
+            "termination-state": self.termination_state(),
+            "termination-direction": self.termination_direction(),
+            "layer-protocol-name": "ETH",
+            "layer-protocol-qualifier": self.protocol(),
+
+            "connection-port-role": "SYMMETRIC",
+            "connection-port-direction": "BIDIRECTIONAL",
+
+            "parent-node-edge-point": {
+                #  TODO              "topology-uuid": "?",
+                "node-uuid": self.parent()["node"],
+                "node-edge-point-uuid": self.parent()["node-edge-point"]
+            }
+        }
+
+    # getter
+    def configuration(self) -> dict:
+        """
+        Getter for a json object representing the TAPI Node Edge Point intiail
+        configuration.
+        :return TAPI Node Edge Point configuration as json object.
+        """
+        return self.__configuration
+
+    def data(self) -> dict:
+        """
+        Getter for a json object representing the TAPI Node Edge Point.
+        :return TAPI Node Edge Point as json object.
+        """
+        return self.__data
+
+    def identifier(self) -> str:
+        """
+        Getter returning the TAPI Node Edge Point identifier.
+        :return Object identifier as UUID.
+        """
+        return self.__data["uuid"]
+
+    def json(self) -> dict:
+        """
+        Getter for a json object representing the TAPI Node Edge Point.
+        :return TAPI Node Edge Point as json object.
+        """
+        return self.data()
+
+    def name(self) -> str:
+        """
+        Getter a human readable identifier of the TAPI Node Edge Point.
+        :return TAPI Node Edge Point name as String.
+        """
+        items = (self.parent()["interface"],
+                 self.protocol().split(":")[1],
+                 self.role())
+        return "-".join(items).lower()
+
+    def protocol(self) -> str:
+        """
+        Getter a human readable identifier of the TAPI Connection Edge Point protocol.
+        :return protocol label.
+        """
+        protocol = self.__configuration['protocol'].lower()
+        if protocol == "otf":
+            protocol = "fronthaul-gateway"
+        return ":".join(["o-ran-sc-topology-common", self.__configuration['protocol'].lower()])
+
+    def role(self) -> str:
+        """
+        Getter a human readable identifier of the TAPI Node Edge Point role.
+        :return role label.
+        """
+        return self.__configuration['role'].lower()
+
+    def parent(self) -> Dict:
+        """
+        Getter returning the identifier the the TAPI Node hosting the Node
+        Edge Point.
+        :return Identifier of the TAPI Node containing this NEP.
+        """
+        return self.__configuration["parent"]
+
+    def svg(self, x: int, y: int) -> etree.Element:
+        """
+        Getter for a xml Element object representing the TAPI Node Edge Point.
+        :return TAPI Node Edge Point as SVG object.
+        """
+        return ConnectionEdgePoint(self, x, y).svg_element()
+
+    def termination_direction(self) -> str:
+        """
+        Getter returning the TAPI Node Edge Point direction.
+        :return TAPI Node Edge Point direction as String.
+        """
+        mapping = {
+            "consumer": "SINK",
+            "provider": "SOURCE"
+        }
+        if self.__configuration['role'].lower() in mapping:
+            return mapping[self.__configuration['role'].lower()]
+        return "BIDIRECTIONAL"
+
+    def termination_state(self) -> str:
+        """
+        Getter returning the TAPI Node Edge Point state.
+        :return TAPI Node Edge Point state as String.
+        """
+        return "LT_PERMENANTLY_TERMINATED"