Merge "Adopt new docs/tox API"
authorMartin Skorupski <martin.skorupski@highstreet-technologies.com>
Tue, 4 Jul 2023 15:20:12 +0000 (15:20 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Tue, 4 Jul 2023 15:20:12 +0000 (15:20 +0000)
15 files changed:
solution/README-O-RU-Controller.md
solution/README.md
solution/network/.env
solution/network/config.py
solution/network/docker-compose.yml
solution/smo/apps/.env
solution/smo/apps/docker-compose.yml
solution/smo/apps/flows/data/.sessions.json
solution/smo/apps/flows/data/flows.json
solution/smo/common/.env
solution/smo/common/docker-compose.yml
solution/smo/common/kafka-bridge/application.properties [new file with mode: 0644]
solution/smo/common/kafka-bridge/log4j2.properties [new file with mode: 0644]
solution/smo/oam/.env
solution/smo/oam/docker-compose.yml

index 8d81611..c652f1e 100644 (file)
@@ -83,9 +83,11 @@ $ cat /etc/hosts
 <deployment-system-ipv4>           gateway.smo.o-ran-sc.org
 <deployment-system-ipv4>          identity.smo.o-ran-sc.org
 <deployment-system-ipv4>          messages.smo.o-ran-sc.org
-<deployment-system-ipv4> ves-collector.oam.smo.o-ran-sc.org
 <deployment-system-ipv4>         odlux.oam.smo.o-ran-sc.org
-<deployment-system-ipv4>    controller.oam.smo.o-ran-sc.org
+<deployment-system-ipv4>         flows.oam.smo.o-ran-sc.org
+<deployment-system-ipv4>         tests.oam.smo.o-ran-sc.org
+<deployment-system-ipv4> ves-collector.dcn.smo.o-ran-sc.org
+<deployment-system-ipv4>    controller.dcn.smo.o-ran-sc.org
 
 ```
 
index d01e664..273e707 100644 (file)
@@ -115,12 +115,15 @@ $ cat /etc/hosts
 
 # SMO OAM development system
 <deployment-system-ipv4>                   smo.o-ran-sc.org
-<deployment-system-ipv4>           gateway.smo.o-ran-sc.org
+<deployment-system-ipv4>           gateway.smo.o-ran-sc.org 
 <deployment-system-ipv4>          identity.smo.o-ran-sc.org
 <deployment-system-ipv4>          messages.smo.o-ran-sc.org
-<deployment-system-ipv4> ves-collector.oam.smo.o-ran-sc.org
+<deployment-system-ipv4>      kafka-bridge.smo.o-ran-sc.org
 <deployment-system-ipv4>         odlux.oam.smo.o-ran-sc.org
-<deployment-system-ipv4>    controller.oam.smo.o-ran-sc.org
+<deployment-system-ipv4>         flows.oam.smo.o-ran-sc.org
+<deployment-system-ipv4>         tests.oam.smo.o-ran-sc.org
+<deployment-system-ipv4>    controller.dcn.smo.o-ran-sc.org
+<deployment-system-ipv4> ves-collector.dcn.smo.o-ran-sc.org
 
 ```
 
index 56d92e2..5a10558 100644 (file)
 # limitations under the License.
 #
 
-COMPOSE_PROJECT_NAME=o-ran-sc-h-release
 HOST_IP=aaa.bbb.ccc.ddd
+# NETWORK_SUBNET_DCN_IPv4=172.60.0.0/24
+NETWORK_SUBNET_DCN_IPv6=2001:db8:1:60::/96
 
 # Credentials
 ADMIN_USERNAME=admin
 ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
 
+# gateway network implemented by traefik
+GATEWAY_DOMAIN=smo.o-ran-sc.org
+
 # SDN Controller
-SDNC_REST_PORT=8181
-SDNC_OAM_IPv4=172.50.0.23
-SDNC_OAM_IPv6=2001:db8:1:50::23
-SDNC_OAM_HOST=controller.oam.smo.o-ran-sc.org
 SDN_CONTROLLER_PROTOCOL=https
+SDNC_DCN_HOST=controller.dcn.smo.o-ran-sc.org
+SDNC_REST_PORT=443
 SDN_CONTROLLER_CALLHOME_SSH_PORT=4334
 SDN_CONTROLLER_CALLHOME_TLS_PORT=4335
 
 # VES Collector
-VES_COLLECTOR_OAM_IPv4=172.50.0.27
-VES_COLLECTOR_OAM_IPv6=2001:db8:1:50::27
-VES_COLLECTOR_OAM_HOST=ves-collector.oam.smo.o-ran-sc.org
-VES_COMMON_HEADER_VERSION=7.2.1
 VES_ENDPOINT_PROTOCOL=https
+VES_COLLECTOR_DCN_HOST=ves-collector.dcn.smo.o-ran-sc.org
 VES_ENDPOINT_PORT=443
+VES_COMMON_HEADER_VERSION=7.2.1
 VES_ENDPOINT_AUTH_METHOD=basic-auth
 VES_ENDPOINT_USERNAME=sample1
 VES_ENDPOINT_PASSWORD=sample1
@@ -45,7 +45,7 @@ VES_ENDPOINT_PASSWORD=sample1
 NEXUS3_DOCKER_REPO=nexus3.o-ran-sc.org:10004/o-ran-sc/
 LOCAL_DOCKER_REPO=o-ran-sc/
 NTS_MANAGER_PORT=8300
-NTS_BUILD_VERSION=1.6.2
+NTS_BUILD_VERSION=1.8.0
 
 IPv6_ENABLED=true
 SSH_CONNECTIONS=1
index a717dbb..c89cb1e 100644 (file)
@@ -36,9 +36,9 @@ dockerFilter = subprocess.check_output("docker ps --format '{{.Names}}'", shell=
 containers = dockerFilter.splitlines()
 
 mapping = dict({"ntsim-ng-o-ru": "O-RU", "ntsim-ng-o-du": "O-DU"})
-base = get_environment_variable('SDN_CONTROLLER_PROTOCOL') + '://' + get_environment_variable('SDNC_OAM_HOST')
-username = 'admin'
-password = 'Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U'
+base = get_environment_variable('SDN_CONTROLLER_PROTOCOL') + '://' + get_environment_variable('SDNC_DCN_HOST')
+username = get_environment_variable('ADMIN_USERNAME')
+password = get_environment_variable('ADMIN_PASSWORD')
 
 # REST to set event settings
 def configEventSettings(nfName, nfType):
index 9fd388e..d8e2ed9 100755 (executable)
@@ -29,13 +29,14 @@ x-common_env: &common_env
     NTS_HOST_TRANSFER_SFTP_BASE_PORT: ${NTS_HOST_TRANSFER_SFTP_BASE_PORT}
 
     SDN_CONTROLLER_PROTOCOL: ${SDN_CONTROLLER_PROTOCOL}
-    SDN_CONTROLLER_IP: ${SDNC_OAM_HOST}
+    SDN_CONTROLLER_IP: ${SDNC_DCN_HOST}
+    SDN_CONTROLLER_CALLHOME_IP: ${SDNC_DCN_HOST}
     SDN_CONTROLLER_USERNAME: ${ADMIN_USERNAME}
     SDN_CONTROLLER_PASSWORD: ${ADMIN_PASSWORD}
 
     VES_COMMON_HEADER_VERSION: ${VES_COMMON_HEADER_VERSION}
     VES_ENDPOINT_PROTOCOL: ${VES_ENDPOINT_PROTOCOL}
-    VES_ENDPOINT_IP: ${VES_COLLECTOR_OAM_HOST}
+    VES_ENDPOINT_IP: ${VES_COLLECTOR_DCN_HOST}
     VES_ENDPOINT_PORT: ${VES_ENDPOINT_PORT}
     VES_ENDPOINT_AUTH_METHOD: ${VES_ENDPOINT_AUTH_METHOD}
     VES_ENDPOINT_USERNAME: ${VES_ENDPOINT_USERNAME}
@@ -54,9 +55,8 @@ x-topo-env: &topo_env
 x-nf: &common_nf
     stop_grace_period: 5m
     extra_hosts:
-      - "identity.smo.o-ran-sc.org:${HOST_IP}"
-      - "controller.oam.smo.o-ran-sc.org:${HOST_IP}"
-      - "ves-collector.oam.smo.o-ran-sc.org:${HOST_IP}"
+      - "controller.dcn.${GATEWAY_DOMAIN}:${HOST_IP}"
+      - "ves-collector.dcn.${GATEWAY_DOMAIN}:${HOST_IP}"
     cap_add:
     - SYS_ADMIN
     - SYS_PTRACE
@@ -98,7 +98,6 @@ services:
         - ./ntsim-ng-o-ru/o-ru-11221/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml
         - ./ntsim-ng-o-ru/o-ru-11221/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml
     environment:
-        SDN_CONTROLLER_CALLHOME_IP: ${SDNC_OAM_IPv4}
         SDN_CONTROLLER_CALLHOME_PORT: ${SDN_CONTROLLER_CALLHOME_SSH_PORT}
         <<: [*common_env, *ru_env]
 
@@ -114,7 +113,6 @@ services:
         - ./ntsim-ng-o-ru/o-ru-11222/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml
         - ./ntsim-ng-o-ru/o-ru-11222/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml
     environment:
-        SDN_CONTROLLER_CALLHOME_IP: ${SDNC_OAM_IPv6}
         SDN_CONTROLLER_CALLHOME_PORT: ${SDN_CONTROLLER_CALLHOME_SSH_PORT}
         <<: [*common_env, *ru_env]
 
@@ -130,7 +128,6 @@ services:
         - ./ntsim-ng-o-ru/o-ru-11223/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml
         - ./ntsim-ng-o-ru/o-ru-11223/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml
     environment:
-        SDN_CONTROLLER_CALLHOME_IP: ${SDNC_OAM_IPv4}
         SDN_CONTROLLER_CALLHOME_PORT: ${SDN_CONTROLLER_CALLHOME_TLS_PORT}
         <<: [*common_env, *ru_env]
 
@@ -146,11 +143,15 @@ services:
         - ./ntsim-ng-o-ru/o-ru-11223/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml
         - ./ntsim-ng-o-ru/o-ru-11223/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml
     environment:
-        SDN_CONTROLLER_CALLHOME_IP: ${SDNC_OAM_IPv6}
         SDN_CONTROLLER_CALLHOME_PORT: ${SDN_CONTROLLER_CALLHOME_TLS_PORT}
         <<: [*common_env, *ru_env]
 
 networks:
     default:
-        name: oam
-        external: true
+        driver: bridge
+        name: network
+        enable_ipv6: true
+        ipam:
+            driver: default
+            config:
+            - subnet:  ${NETWORK_SUBNET_DCN_IPv6}
index d891cf5..756ef69 100644 (file)
@@ -20,6 +20,9 @@ COMPOSE_PROJECT_NAME=o-ran-sc-h-release
 ADMIN_USERNAME=admin
 ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
 
+# Network settings
+HOST_IP=aaa.bbb.ccc.ddd
+
 # flows (implemened by nodered)
 FLOWS_IMAGE=nodered/node-red:latest
 
index e3a60e3..ce4eb45 100644 (file)
@@ -9,17 +9,19 @@ services:
         - BASEIMAGE=${FLOWS_IMAGE}
     container_name: flows
     hostname: flows
+    extra_hosts:
+      - "flows.oam.${SOLUTION_DOMAIN}:${HOST_IP}"
     environment:
       APP_VENDOR: ${APP_VENDOR}
       APP_SOURCE: ${APP_SOURCE}
       APP_NETWORK_FUNCTION_ID: ${APP_NETWORK_FUNCTION_ID}
       SDN_CONTROLLER_PROTOCOL: https
-      SDN_CONTROLLER_HOST: controller.oam.${SOLUTION_DOMAIN}
+      SDN_CONTROLLER_HOST: controller.dcn.${SOLUTION_DOMAIN}
       SDN_CONTROLLER_PORT: 443
       SDN_CONTROLLER_USERNAME: ${ADMIN_USERNAME}
       SDN_CONTROLLER_PASSWORD: ${ADMIN_PASSWORD}
       VES_ENDPOINT_PROTOCOL: https
-      VES_ENDPOINT_HOST: ves-collector.oam.${SOLUTION_DOMAIN}
+      VES_ENDPOINT_HOST: ves-collector.dcn.${SOLUTION_DOMAIN}
       VES_ENDPOINT_PORT: 443
       VES_ENDPOINT_AUTH_METHOD: ${VES_ENDPOINT_AUTH_METHOD}
       VES_ENDPOINT_USERNAME: ${VES_ENDPOINT_USERNAME}
@@ -27,7 +29,11 @@ services:
       MESSAGES_PROTOCOL: https
       MESSAGES_HOST: messages.${SOLUTION_DOMAIN}
       MESSAGES_PORT: 443
-
+      KAFKA_BRIDGE_PROTOCOL: https
+      KAFKA_BRIDGE_HOST: kafka-bridge.${SOLUTION_DOMAIN}
+      KAFKA_BRIDGE_PORT: 443
+      KAFKA_BRIDGE_CONSUMER_GROUP: app
+      KAFKA_BRIDGE_CONSUMER_NAME: message-consumer
     labels:
       traefik.enable: true
       traefik.http.routers.flows.entrypoints: websecure
@@ -37,8 +43,8 @@ services:
     volumes:
       - ./flows/data:/data
     networks:
-      smo:
+      dmz:
 
 networks:
-  smo:
+  dmz:
     external: true
\ No newline at end of file
index 2ab160f..7465973 100644 (file)
@@ -1 +1 @@
-{"wMn2YBLgm/twWOxiqN476VqJQSp3lnisGyhE3N6eCNr/iiyyrMZaoB4x3YZJrfMln2h5jjryg3QWphRbqVvfWexsxsl/QEDLST/gbksuklDRRCjdU4Mpb2x84wP3XB6lt7yfaSJyahX0itEcYAJBxjidxx6puieqzEmREjfxIZE=":{"user":"admin","client":"node-red-editor","scope":"*","accessToken":"wMn2YBLgm/twWOxiqN476VqJQSp3lnisGyhE3N6eCNr/iiyyrMZaoB4x3YZJrfMln2h5jjryg3QWphRbqVvfWexsxsl/QEDLST/gbksuklDRRCjdU4Mpb2x84wP3XB6lt7yfaSJyahX0itEcYAJBxjidxx6puieqzEmREjfxIZE=","expires":1683209440148}}
\ No newline at end of file
+{"u2HZpR5BJG6q05WE7ojMTSvrINjM0QJq2OgJci7B55HWTVVUvUERXtqfEapC5PX3Kw2Qcgxqfz/Qgrg3WhiygX72HCB1xNXptE01s+CPA/jt1g3iqN0ZNY1k7wJt4GgtN0d6IIZRzSpe8ZL5x8Opx38DChex8gn+cK0dYURU398=":{"user":"admin","client":"node-red-editor","scope":"*","accessToken":"u2HZpR5BJG6q05WE7ojMTSvrINjM0QJq2OgJci7B55HWTVVUvUERXtqfEapC5PX3Kw2Qcgxqfz/Qgrg3WhiygX72HCB1xNXptE01s+CPA/jt1g3iqN0ZNY1k7wJt4GgtN0d6IIZRzSpe8ZL5x8Opx38DChex8gn+cK0dYURU398=","expires":1684318736958},"bogJaMH12Ns6tIkYVXcnpEr29RFgftKQ0y7H4bWFI4VHP++LTHcOc4EsUU9Z/XFaTJR6t2TPG55PZhzDk8v4WunJ38AFDIToq8KRdfJDAMQqSCMJMTmgHupLS5iECJvS8YJQgRW3CHe+2qsQWtWuZmlJUcBu0fwYdTKtz0+ShVw=":{"user":"admin","client":"node-red-editor","scope":"*","accessToken":"bogJaMH12Ns6tIkYVXcnpEr29RFgftKQ0y7H4bWFI4VHP++LTHcOc4EsUU9Z/XFaTJR6t2TPG55PZhzDk8v4WunJ38AFDIToq8KRdfJDAMQqSCMJMTmgHupLS5iECJvS8YJQgRW3CHe+2qsQWtWuZmlJUcBu0fwYdTKtz0+ShVw=","expires":1684659878559},"WNTOBijmJOK5hvKQVxq41zeBhRKx7BHw8piBsFQfrri1y66NPbs6GrB0xRjsEaRAOe3q3ZapY79zosrc3DYlCV6U3nY5JbHRGJbJYOhxyBiIP1iY8OjcFmkrK0u49vQYNR530gSjCENx5WSMqBGth0+mxYp8GdY/Lig4u9prOBw=":{"user":"admin","client":"node-red-editor","scope":"*","accessToken":"WNTOBijmJOK5hvKQVxq41zeBhRKx7BHw8piBsFQfrri1y66NPbs6GrB0xRjsEaRAOe3q3ZapY79zosrc3DYlCV6U3nY5JbHRGJbJYOhxyBiIP1iY8OjcFmkrK0u49vQYNR530gSjCENx5WSMqBGth0+mxYp8GdY/Lig4u9prOBw=","expires":1684664566860}}
\ No newline at end of file
index e16c5e6..5f65a8c 100644 (file)
@@ -8,11 +8,11 @@
         "env": []
     },
     {
-        "id": "c5746e29f53f72ce",
+        "id": "db7b8dca98eba850",
         "type": "tab",
         "label": "Message Topics",
         "disabled": false,
-        "info": "Subscribes to Kafka topics",
+        "info": "Subscribes to kafka topics using the strimzi kafka bridge implementation. \n",
         "env": []
     },
     {
         "name": "ves-message-data",
         "active": true,
         "tosidebar": false,
-        "console": false,
+        "console": true,
         "tostatus": true,
         "complete": "payload",
         "targetType": "msg",
         "statusVal": "payload.event.commonEventHeader.stndDefinedNamespace",
         "statusType": "msg",
-        "x": 1050,
+        "x": 1060,
         "y": 220,
         "wires": []
     },
         ],
         "repeat": "3",
         "crontab": "",
-        "once": true,
+        "once": false,
         "onceDelay": 0.1,
         "topic": "notifyHeartbeat",
         "payload": "",
         "type": "function",
         "z": "51e83a0892da060e",
         "name": "vesStndDefindBody",
-        "func": "const eventTime = new Date(msg.payload).toISOString();\nmsg.payload = {\n    schemaReference: 'https://gerrit.o-ran-sc.org/r/gitweb?p=scp/oam/modeling.git;a=blob_plain;f=data-model/yang/published/o-ran/ru-fh/o-ran-file-management.yang#components/schemas/ofhm-event-stream',\n    stndDefinedFieldsVersion: '1.0',\n    data: {\n        'ietf:notification': {\n            'eventTime': eventTime,\n            'o-ran-file-management:file-download-event': {\n                'local-logical-file-path': 'o-ran/log',\n                'remote-file-path': 'ftpes://username@ftpes.oam.smo.o-ran-sc/downloads',\n                'status': 'FAILURE',\n                'reject-reason': 'FTPes Server not reachable.'\n            }\n        }\n    }\n};\nmsg.topic = 'stndDefinedFields';\nreturn msg;",
+        "func": "const eventTime = new Date(msg.payload).toISOString();\nmsg.payload = {\n    schemaReference: 'https://gerrit.o-ran-sc.org/r/gitweb?p=scp/oam/modeling.git;a=blob_plain;f=data-model/yang/published/o-ran/ru-fh/o-ran-file-management.yang#components/schemas/ofhm-event-stream',\n    stndDefinedFieldsVersion: '1.0',\n    data: {\n        'ietf:notification': {\n            'eventTime': eventTime,\n            'o-ran-file-management:file-download-event': {\n                'local-logical-file-path': 'o-ran/log',\n                'remote-file-path': 'ftpes://username@ftpes.dcn.smo.o-ran-sc/downloads',\n                'status': 'FAILURE',\n                'reject-reason': 'FTPes Server not reachable.'\n            }\n        }\n    }\n};\nmsg.topic = 'stndDefinedFields';\nreturn msg;",
         "outputs": 1,
         "noerr": 0,
         "initialize": "",
         "type": "function",
         "z": "51e83a0892da060e",
         "name": "vesStndDefindBody",
-        "func": "const eventTime = new Date(msg.payload).toISOString();\nmsg.payload = {\n    schemaReference: 'https://gerrit.o-ran-sc.org/r/gitweb?p=scp/oam/modeling.git;a=blob_plain;f=data-model/yang/published/o-ran/ru-fh/o-ran-file-management.yang#components/schemas/ofhm-event-stream',\n    stndDefinedFieldsVersion: '1.0',\n    data: {\n        'ietf:notification': {\n            'eventTime': eventTime,\n            'o-ran-file-management:file-upload-notification': {\n                'local-logical-file-path': 'o-ran/log',\n                'remote-file-path': 'ftpes://username@ftpes.oam.smo.o-ran-sc/downloads',\n                'status': 'FAILURE',\n                'reject-reason': 'FTPes Server not reachable.'\n            }\n        }\n    }\n};\nmsg.topic = 'stndDefinedFields';\nreturn msg;",
+        "func": "const eventTime = new Date(msg.payload).toISOString();\nmsg.payload = {\n    schemaReference: 'https://gerrit.o-ran-sc.org/r/gitweb?p=scp/oam/modeling.git;a=blob_plain;f=data-model/yang/published/o-ran/ru-fh/o-ran-file-management.yang#components/schemas/ofhm-event-stream',\n    stndDefinedFieldsVersion: '1.0',\n    data: {\n        'ietf:notification': {\n            'eventTime': eventTime,\n            'o-ran-file-management:file-upload-notification': {\n                'local-logical-file-path': 'o-ran/log',\n                'remote-file-path': 'ftpes://username@ftpes.dcn.smo.o-ran-sc/downloads',\n                'status': 'FAILURE',\n                'reject-reason': 'FTPes Server not reachable.'\n            }\n        }\n    }\n};\nmsg.topic = 'stndDefinedFields';\nreturn msg;",
         "outputs": 1,
         "noerr": 0,
         "initialize": "",
         ]
     },
     {
-        "id": "910dfec7eb74df65",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "pnfRegistration",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "60",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "pnfRegistration",
-        "payload": "",
-        "payloadType": "date",
-        "x": 240,
-        "y": 80,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "562063a080cb99d6",
+        "id": "a2d14719998c5951",
         "type": "debug",
-        "z": "c5746e29f53f72ce",
+        "z": "db7b8dca98eba850",
         "name": "eventData",
         "active": true,
         "tosidebar": true,
         "targetType": "msg",
         "statusVal": "payload.length",
         "statusType": "msg",
-        "x": 1170,
-        "y": 220,
+        "x": 770,
+        "y": 520,
         "wires": []
     },
     {
-        "id": "172060688d87f510",
+        "id": "393ee0aac0784928",
         "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "notifyHeartbeat",
+        "z": "db7b8dca98eba850",
+        "name": "Get Topics",
         "props": [
             {
                 "p": "payload"
         ],
         "repeat": "5",
         "crontab": "",
-        "once": true,
-        "onceDelay": 0.1,
-        "topic": "notifyHeartbeat",
-        "payload": "",
-        "payloadType": "date",
-        "x": 230,
-        "y": 400,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "311c3b5d3d73fc24",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyFileReady",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
         "once": false,
         "onceDelay": 0.1,
-        "topic": "notifyFileReady",
+        "topic": "get",
         "payload": "",
         "payloadType": "date",
-        "x": 240,
-        "y": 480,
+        "x": 130,
+        "y": 520,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "f8d2934457eb7030"
             ]
         ]
     },
     {
-        "id": "5437e3fdfca300c9",
+        "id": "9745e4eaaad146b5",
         "type": "http request",
-        "z": "c5746e29f53f72ce",
+        "z": "db7b8dca98eba850",
         "name": "",
         "method": "GET",
-        "ret": "txt",
+        "ret": "obj",
         "paytoqs": "ignore",
         "url": "",
         "tls": "7b2f4859e5963695",
         "authType": "",
         "senderr": false,
         "headers": [],
-        "x": 850,
-        "y": 220,
+        "x": 470,
+        "y": 520,
         "wires": [
             [
-                "dc576b6355478428"
+                "ec4917fbcca1ea55"
             ]
         ]
     },
     {
-        "id": "dc576b6355478428",
+        "id": "ec4917fbcca1ea55",
         "type": "function",
-        "z": "c5746e29f53f72ce",
+        "z": "db7b8dca98eba850",
         "name": "Provider",
-        "func": "const string = msg.payload;\nconst array = JSON.parse(string);\nif (Array.isArray(array)) {\n    msg.payload = array.map( (item) => {\n        if (typeof item === 'string' || item instanceof String) {\n            return JSON.parse(item);\n        }\n    });\n} else {\n    msg.payload = array;\n}\nglobal.set('topicData', msg.payload)\nreturn msg;",
+        "func": "global.set('topicData', msg.payload)\nreturn msg;",
         "outputs": 1,
         "noerr": 0,
         "initialize": "",
         "finalize": "",
         "libs": [],
-        "x": 1020,
-        "y": 220,
+        "x": 620,
+        "y": 520,
         "wires": [
             [
-                "562063a080cb99d6"
+                "a2d14719998c5951"
             ]
         ]
     },
     {
-        "id": "e5f66f4bd6777ca0",
+        "id": "f8d2934457eb7030",
         "type": "function",
-        "z": "c5746e29f53f72ce",
+        "z": "db7b8dca98eba850",
         "name": "http-preparation",
-        "func": "const protocol = env.get('MESSAGES_PROTOCOL');\nconst host = env.get('MESSAGES_HOST');\nconst port = env.get('MESSAGES_PORT');;\nconst base = protocol + '://' + host + ':' + port;\n\nconst path = 'events';\nconst urlMapping = {\n    pnfRegistration: 'unauthenticated.VES_PNFREG_OUTPUT',\n    heartbeat: 'unauthenticated.SEC_HEARTBEAT_OUTPUT',\n    fault: 'unauthenticated.SEC_FAULT_OUTPUT',\n    o1NotifyPnfRegistration: 'unauthenticated.VES_O1_NOTIFY_PNF_REGISTRATION_OUTPUT',\n    oRanScDuHelloWorldPmStreaming: 'unauthenticated.VES_O_RAN_SC_HELLO_WORLD_PM_STREAMING_OUTPUT',\n    notifyHeartbeat: 'unauthenticated.SEC_3GPP_HEARTBEAT_OUTPUT',\n    notifyFileReady: 'unauthenticated.VES_FILE_READY_OUTPUT',\n    notifyFilePreparationError: 'unauthenticated.VES_FILE_READY_OUTPUT',\n    oRanOpenfrontManagementPlane: 'unauthenticated.VES_O_RAN_SC_OPENFRONTHAUL_OUTPUT',\n    notifyNewAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyChangedAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyChangedAlarmGeneral: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyAckStateChanged: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyCorrelatedNotificationChanged: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyComments: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyClearedAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyAlarmListRebuilt: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyPotentialFaultyAlarmList: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT'\n};\nconst longPolling = '?timeout=60000'\nconst urlTopic = urlMapping[msg.topic] || msg.topic.replace(':', '-');\nmsg.url = [base, path, urlTopic, '1', '1'].join('/') + longPolling;\nreturn msg;",
+        "func": "const protocol = env.get('KAFKA_BRIDGE_PROTOCOL');\nconst host = env.get('KAFKA_BRIDGE_HOST');\nconst port = env.get('KAFKA_BRIDGE_PORT');;\nconst base = protocol + '://' + host + ':' + port;\nconst group = env.get('KAFKA_BRIDGE_CONSUMER_GROUP');\nconst name = env.get('KAFKA_BRIDGE_CONSUMER_NAME');\n\nconst urlMapping = {\n    pnfRegistration: 'unauthenticated.VES_PNFREG_OUTPUT',\n    heartbeat: 'unauthenticated.SEC_HEARTBEAT_OUTPUT',\n    fault: 'unauthenticated.SEC_FAULT_OUTPUT',\n    o1NotifyPnfRegistration: 'unauthenticated.VES_O1_NOTIFY_PNF_REGISTRATION_OUTPUT',\n    oRanScDuHelloWorldPmStreaming: 'unauthenticated.VES_O_RAN_SC_HELLO_WORLD_PM_STREAMING_OUTPUT',\n    notifyHeartbeat: 'unauthenticated.SEC_3GPP_HEARTBEAT_OUTPUT',\n    notifyFileReady: 'unauthenticated.VES_FILE_READY_OUTPUT',\n    notifyFilePreparationError: 'unauthenticated.VES_FILE_READY_OUTPUT',\n    oRanOpenfrontManagementPlane: 'unauthenticated.VES_O_RAN_SC_OPENFRONTHAUL_OUTPUT',\n    notifyNewAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyChangedAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyChangedAlarmGeneral: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyAckStateChanged: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyCorrelatedNotificationChanged: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyComments: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyClearedAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyAlarmListRebuilt: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n    notifyPotentialFaultyAlarmList: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT'\n};\n\nmsg.url = [base, 'consumers', group, 'instances', name, 'records'].join('/');\nmsg.headers = {\n    accept: 'application/vnd.kafka.json.v2+json'\n}\nreturn msg;",
         "outputs": 1,
         "noerr": 0,
         "initialize": "",
         "finalize": "",
         "libs": [],
-        "x": 500,
-        "y": 220,
+        "x": 300,
+        "y": 520,
         "wires": [
             [
-                "5437e3fdfca300c9"
+                "9745e4eaaad146b5"
             ]
         ]
     },
     {
-        "id": "42275e9c12f8e52b",
-        "type": "comment",
-        "z": "c5746e29f53f72ce",
-        "name": "from O-RAN-SC",
-        "info": "",
-        "x": 100,
-        "y": 220,
-        "wires": []
-    },
-    {
-        "id": "e07fa97ebc66dce0",
+        "id": "c82c06ee1b7fad77",
         "type": "comment",
-        "z": "c5746e29f53f72ce",
-        "name": "from ONAP",
+        "z": "db7b8dca98eba850",
+        "name": "Get Records",
         "info": "",
         "x": 90,
-        "y": 40,
-        "wires": []
-    },
-    {
-        "id": "44b8c2cc138777f1",
-        "type": "comment",
-        "z": "c5746e29f53f72ce",
-        "name": "from SA5 R-18 branch",
-        "info": "",
-        "x": 120,
-        "y": 360,
+        "y": 480,
         "wires": []
     },
     {
-        "id": "4480e5473a65a757",
+        "id": "6cc496f1420404b3",
         "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "oRanScDuHelloWorldPmStreaming",
+        "z": "db7b8dca98eba850",
+        "name": "Topics?",
         "props": [
             {
                 "p": "payload"
         ],
         "repeat": "",
         "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "oRanScDuHelloWorldPmStreaming",
+        "once": true,
+        "onceDelay": "0.8",
+        "topic": "topics",
         "payload": "",
         "payloadType": "date",
-        "x": 180,
-        "y": 300,
+        "x": 120,
+        "y": 400,
+        "wires": [
+            [
+                "7a931d124e3fdc64"
+            ]
+        ]
+    },
+    {
+        "id": "7a931d124e3fdc64",
+        "type": "function",
+        "z": "db7b8dca98eba850",
+        "name": "http-preparation",
+        "func": "const protocol = env.get('KAFKA_BRIDGE_PROTOCOL');\nconst host = env.get('KAFKA_BRIDGE_HOST');\nconst port = env.get('KAFKA_BRIDGE_PORT');\nconst base = protocol + '://' + host + ':' + port;\nconst path = msg.topic;\nmsg.url = [base, path].join('/');\nmsg.method = 'get';\nmsg.headers = {\n    accept: 'application/vnd.kafka.v2+json'\n}\nreturn msg;",
+        "outputs": 1,
+        "noerr": 0,
+        "initialize": "",
+        "finalize": "",
+        "libs": [],
+        "x": 340,
+        "y": 400,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "53aae16b268527f7"
             ]
         ]
     },
     {
-        "id": "52f22ee054e5b4ac",
+        "id": "051acf7693d4d457",
         "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "o1NotifyPnfRegistration",
+        "z": "db7b8dca98eba850",
+        "name": "Do Subscription",
         "props": [
             {
                 "p": "payload"
         ],
         "repeat": "",
         "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o1NotifyPnfRegistration",
+        "once": true,
+        "onceDelay": "0.6",
+        "topic": "subscription",
         "payload": "",
         "payloadType": "date",
-        "x": 220,
-        "y": 260,
+        "x": 140,
+        "y": 300,
+        "wires": [
+            [
+                "a72e6d0ab9261954"
+            ]
+        ]
+    },
+    {
+        "id": "a72e6d0ab9261954",
+        "type": "function",
+        "z": "db7b8dca98eba850",
+        "name": "http-preparation",
+        "func": "const protocol = env.get('KAFKA_BRIDGE_PROTOCOL');\nconst host = env.get('KAFKA_BRIDGE_HOST');\nconst port = env.get('KAFKA_BRIDGE_PORT');\nconst base = protocol + '://' + host + ':' + port;\nconst group = env.get('KAFKA_BRIDGE_CONSUMER_GROUP');\nconst name = env.get('KAFKA_BRIDGE_CONSUMER_NAME');\nmsg.url = [base, 'consumers', group, 'instances', name, msg.topic].join('/');\nmsg.method = 'post';\nmsg.headers = {\n    'content-type': 'application/vnd.kafka.v2+json',\n    accept: 'application/vnd.kafka.v2+json'\n}\nmsg.payload = {\n    \"topics\": [\"unauthenticated.VES_O1_NOTIFY_PNF_REGISTRATION_OUTPUT\", \"unauthenticated.SEC_HEARTBEAT_OUTPUT\", \"unauthenticated.VES_O_RAN_SC_HELLO_WORLD_PM_STREAMING_OUTPUT\", \"unauthenticated.VES_PNFREG_OUTPUT\", \"unauthenticated.VES_FILE_READY_OUTPUT\", \"o-ran-file-management-file-download-event\", \"bridge-quickstart-topic\", \"o-ran-file-management-file-upload-notification\", \"o-ran-supervision-supervision-notification\", \"unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT\", \"my-topic\", \"unauthenticated.SEC_3GPP_HEARTBEAT_OUTPUT\", \"unauthenticated.SEC_FAULT_OUTPUT\"]\n}\n\nreturn msg;\n",
+        "outputs": 1,
+        "noerr": 0,
+        "initialize": "",
+        "finalize": "",
+        "libs": [],
+        "x": 340,
+        "y": 300,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "53aae16b268527f7"
             ]
         ]
     },
     {
-        "id": "3051f52553efaaa4",
+        "id": "53aae16b268527f7",
         "type": "http request",
-        "z": "c5746e29f53f72ce",
-        "name": "",
-        "method": "GET",
+        "z": "db7b8dca98eba850",
+        "name": "http request",
+        "method": "use",
         "ret": "txt",
         "paytoqs": "ignore",
         "url": "",
         "authType": "",
         "senderr": false,
         "headers": [],
-        "x": 850,
-        "y": 180,
+        "x": 590,
+        "y": 300,
         "wires": [
             [
-                "dc576b6355478428"
+                "025484501aa58b31"
             ]
         ]
     },
     {
-        "id": "0acceacb99b7981a",
+        "id": "025484501aa58b31",
+        "type": "debug",
+        "z": "db7b8dca98eba850",
+        "name": "Response",
+        "active": true,
+        "tosidebar": true,
+        "console": true,
+        "tostatus": true,
+        "complete": "payload",
+        "targetType": "msg",
+        "statusVal": "statusCode",
+        "statusType": "msg",
+        "x": 770,
+        "y": 300,
+        "wires": []
+    },
+    {
+        "id": "2bcd1fcc0cb4f747",
         "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "Topics?",
+        "z": "db7b8dca98eba850",
+        "name": "healthy?",
         "props": [
             {
                 "p": "payload"
         ],
         "repeat": "",
         "crontab": "",
-        "once": false,
+        "once": true,
         "onceDelay": 0.1,
-        "topic": "topics",
+        "topic": "healthy",
         "payload": "",
         "payloadType": "date",
-        "x": 530,
-        "y": 180,
+        "x": 120,
+        "y": 80,
         "wires": [
             [
-                "e4ec70e46406674f"
+                "4b695d52e3231b6b"
             ]
         ]
     },
     {
-        "id": "34b7ac222692e06d",
-        "type": "comment",
-        "z": "c5746e29f53f72ce",
-        "name": "from OpenFronthaul Management-Plane",
-        "info": "",
-        "x": 580,
-        "y": 280,
-        "wires": []
+        "id": "4b695d52e3231b6b",
+        "type": "function",
+        "z": "db7b8dca98eba850",
+        "name": "http-preparation",
+        "func": "const protocol = env.get('KAFKA_BRIDGE_PROTOCOL');\nconst host = env.get('KAFKA_BRIDGE_HOST');\nconst port = env.get('KAFKA_BRIDGE_PORT');\nconst base = protocol + '://' + host + ':' + port;\nmsg.url = [base, msg.topic].join('/');\nmsg.method = 'get';\nmsg.headers = {\n    accept: 'application/json'\n}\nreturn msg;\n",
+        "outputs": 1,
+        "noerr": 0,
+        "initialize": "",
+        "finalize": "",
+        "libs": [],
+        "x": 340,
+        "y": 200,
+        "wires": [
+            [
+                "53aae16b268527f7"
+            ]
+        ]
     },
     {
-        "id": "25a3eca83bbc3489",
+        "id": "2d834fde764e3443",
         "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "o-ran-supervision:supervision-notification",
+        "z": "db7b8dca98eba850",
+        "name": "ready?",
         "props": [
             {
                 "p": "payload"
                 "vt": "str"
             }
         ],
-        "repeat": "60",
+        "repeat": "",
         "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-supervision:supervision-notification",
+        "once": true,
+        "onceDelay": "0.2",
+        "topic": "ready",
         "payload": "",
         "payloadType": "date",
-        "x": 620,
-        "y": 1040,
+        "x": 120,
+        "y": 120,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "4b695d52e3231b6b"
             ]
         ]
     },
     {
-        "id": "0194d014ef8f6c5e",
+        "id": "7bbff4bdad2683f0",
         "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "o-ran-file-management:file-upload-notification",
+        "z": "db7b8dca98eba850",
+        "name": "Schema?",
         "props": [
             {
                 "p": "payload"
         ],
         "repeat": "",
         "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-file-management:file-upload-notification",
+        "once": true,
+        "onceDelay": "0.4",
+        "topic": "openapi",
         "payload": "",
         "payloadType": "date",
-        "x": 630,
-        "y": 760,
+        "x": 120,
+        "y": 200,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "4b695d52e3231b6b"
             ]
         ]
     },
     {
-        "id": "775aacf9e2cc0285",
+        "id": "1b322733222d5c1d",
         "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "o-ran-file-management:file-download-event",
+        "z": "db7b8dca98eba850",
+        "name": "Version?",
         "props": [
             {
                 "p": "payload"
         ],
         "repeat": "",
         "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-file-management:file-download-event",
+        "once": true,
+        "onceDelay": "0.3",
+        "topic": " ",
         "payload": "",
         "payloadType": "date",
-        "x": 620,
-        "y": 720,
+        "x": 120,
+        "y": 160,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "4b695d52e3231b6b"
             ]
         ]
     },
     {
-        "id": "3e3be17a65a7d1bf",
+        "id": "12e182c0bee28aad",
         "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-ald-port:dc-enabled-status-change",
+        "z": "db7b8dca98eba850",
+        "name": "CreateConsumer",
         "props": [
             {
                 "p": "payload"
         ],
         "repeat": "",
         "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-ald-port:dc-enabled-status-change",
+        "once": true,
+        "onceDelay": "0.5",
+        "topic": "consumers",
         "payload": "",
         "payloadType": "date",
-        "x": 620,
-        "y": 320,
+        "x": 150,
+        "y": 260,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "46c33603561bf711"
             ]
         ]
     },
     {
-        "id": "665c45e5ccd1c9cb",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-ald-port:overcurrent-report",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-ald-port:overcurrent-report",
-        "payload": "",
-        "payloadType": "date",
-        "x": 590,
-        "y": 360,
+        "id": "46c33603561bf711",
+        "type": "function",
+        "z": "db7b8dca98eba850",
+        "name": "http-preparation",
+        "func": "const protocol = env.get('KAFKA_BRIDGE_PROTOCOL');\nconst host = env.get('KAFKA_BRIDGE_HOST');\nconst port = env.get('KAFKA_BRIDGE_PORT');\nconst base = protocol + '://' + host + ':' + port;\nconst group = env.get('KAFKA_BRIDGE_CONSUMER_GROUP');\nconst name = env.get('KAFKA_BRIDGE_CONSUMER_NAME');\nmsg.url = [base, msg.topic, group].join('/');\nmsg.method = 'post';\nmsg.headers = {\n    'content-type': 'application/vnd.kafka.v2+json',\n    accept: 'application/vnd.kafka.v2+json'\n}\nmsg.payload = {\n    name: name,\n    format: 'json',\n    'auto.offset.reset': 'earliest',\n    'enable.auto.commit': true,\n    'fetch.min.bytes': 1,\n    'consumer.request.timeout.ms': 30000,\n    'isolation.level': 'read_uncommitted'\n}\n\nreturn msg;\n",
+        "outputs": 1,
+        "noerr": 0,
+        "initialize": "",
+        "finalize": "",
+        "libs": [],
+        "x": 340,
+        "y": 260,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "53aae16b268527f7"
             ]
         ]
     },
     {
-        "id": "5520ce3b83578f17",
+        "id": "63c336487e6e0eb9",
         "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-antenna-calibration:antenna-calibration-coordinated",
+        "z": "db7b8dca98eba850",
+        "name": "Get Subscription",
         "props": [
             {
                 "p": "payload"
         ],
         "repeat": "",
         "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-antenna-calibration:antenna-calibration-coordinated",
+        "once": true,
+        "onceDelay": "0.7",
+        "topic": "subscription",
         "payload": "",
         "payloadType": "date",
-        "x": 670,
-        "y": 400,
+        "x": 150,
+        "y": 340,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "b0f5987ab4bd1256"
             ]
         ]
     },
     {
-        "id": "fda3090fb4f1e9d4",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-antenna-calibration:antenna-calibration-multiple-time-resource-params",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-antenna-calibration:antenna-calibration-multiple-time-resource-params",
-        "payload": "",
-        "payloadType": "date",
-        "x": 730,
-        "y": 440,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "2551bb6c9746a7c2",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-antenna-calibration:antenna-calibration-required",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-antenna-calibration:antenna-calibration-required",
-        "payload": "",
-        "payloadType": "date",
-        "x": 660,
-        "y": 480,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "0dcc72d0235e6336",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-antenna-calibration:antenna-calibration-result",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-antenna-calibration:antenna-calibration-result",
-        "payload": "",
-        "payloadType": "date",
-        "x": 650,
-        "y": 520,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "0abafa5c1a4ebd33",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-beamforming:beamforming-information-update",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-beamforming:beamforming-information-update",
-        "payload": "",
-        "payloadType": "date",
-        "x": 650,
-        "y": 560,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "d74c5f1885485d8c",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-beamforming:capability-group-beamforming-information-update",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-beamforming:capability-group-beamforming-information-update",
-        "payload": "",
-        "payloadType": "date",
-        "x": 700,
-        "y": 600,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "8d755b355a3d5557",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-beamforming:predefined-beam-tilt-offset-complete",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-beamforming:predefined-beam-tilt-offset-complete",
-        "payload": "",
-        "payloadType": "date",
-        "x": 660,
-        "y": 640,
-        "wires": [
-            []
-        ]
-    },
-    {
-        "id": "6ebe4693c580ae00",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-externalio:external-input-change",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-externalio:external-input-change",
-        "payload": "",
-        "payloadType": "date",
-        "x": 610,
-        "y": 680,
-        "wires": [
-            []
-        ]
-    },
-    {
-        "id": "89144928a6ead625",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-fm:alarm-notif",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-fm:alarm-notif",
-        "payload": "",
-        "payloadType": "date",
-        "x": 550,
-        "y": 800,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "8ebca0cd456a9763",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-laa-operations:measurement-result",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-laa-operations:measurement-result",
-        "payload": "",
-        "payloadType": "date",
-        "x": 620,
-        "y": 840,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "4778511387bc7449",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-performance-management:measurement-result-stats",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-performance-management:measurement-result-stats",
-        "payload": "",
-        "payloadType": "date",
-        "x": 670,
-        "y": 880,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "c106623d629fbe54",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-software-management:activation-event",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-software-management:activation-event",
-        "payload": "",
-        "payloadType": "date",
-        "x": 630,
-        "y": 920,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "4db0e5b915d76ddb",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-software-management:download-event",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-software-management:download-event",
-        "payload": "",
-        "payloadType": "date",
-        "x": 630,
-        "y": 960,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "8d3fab47729a807d",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-software-management:install-event",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-software-management:install-event",
-        "payload": "",
-        "payloadType": "date",
-        "x": 620,
-        "y": 1000,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "7ac87519cb59151d",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-sync:gnss-state-change",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-sync:gnss-state-change",
-        "payload": "",
-        "payloadType": "date",
-        "x": 580,
-        "y": 1080,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "55725b18e27c1a27",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-sync:ptp-state-change",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-sync:ptp-state-change",
-        "payload": "",
-        "payloadType": "date",
-        "x": 580,
-        "y": 1120,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "dde01e699dec844f",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-sync:synce-state-change",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-sync:synce-state-change",
-        "payload": "",
-        "payloadType": "date",
-        "x": 590,
-        "y": 1160,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "5457d995823e58f6",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-sync:synchronization-state-change",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-sync:synchronization-state-change",
-        "payload": "",
-        "payloadType": "date",
-        "x": 620,
-        "y": 1200,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "ca9f765b3838d5ff",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-trace:trace-log-generated",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-trace:trace-log-generated",
-        "payload": "",
-        "payloadType": "date",
-        "x": 590,
-        "y": 1240,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "0a837c4beaa140e0",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-uplane-conf:rx-array-carriers-state-change",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-uplane-conf:rx-array-carriers-state-change",
-        "payload": "",
-        "payloadType": "date",
-        "x": 640,
-        "y": 1320,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "3dfb5349f08c5ea9",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-troubleshooting:troubleshooting-log-generated",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-troubleshooting:troubleshooting-log-generated",
-        "payload": "",
-        "payloadType": "date",
-        "x": 650,
-        "y": 1280,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "030a6e7e6371402e",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "d": true,
-        "name": "o-ran-uplane-conf:tx-array-carriers-state-change",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "o-ran-uplane-conf:tx-array-carriers-state-change",
-        "payload": "",
-        "payloadType": "date",
-        "x": 640,
-        "y": 1360,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "d932661ae80274a1",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyNewAlarm",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyNewAlarm",
-        "payload": "",
-        "payloadType": "date",
-        "x": 240,
-        "y": 600,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "c4337f08252203ec",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyChangedAlarm",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyChangedAlarm",
-        "payload": "",
-        "payloadType": "date",
-        "x": 230,
-        "y": 640,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "62048992a866405d",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyChangedAlarmGeneral",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyChangedAlarmGeneral",
-        "payload": "",
-        "payloadType": "date",
-        "x": 200,
-        "y": 680,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "353e0a6e1e693ae5",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyAckStateChanged",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyAckStateChanged",
-        "payload": "",
-        "payloadType": "date",
-        "x": 220,
-        "y": 720,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "3879e3d1320f1459",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyCorrelatedNotificationChanged",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyCorrelatedNotificationChanged",
-        "payload": "",
-        "payloadType": "date",
-        "x": 180,
-        "y": 760,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "ea314b13220c8f40",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyComments",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyComments",
-        "payload": "",
-        "payloadType": "date",
-        "x": 240,
-        "y": 800,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "407c7befca74d24b",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyClearedAlarm",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyClearedAlarm",
-        "payload": "",
-        "payloadType": "date",
-        "x": 230,
-        "y": 840,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "c054dd03a80a4e48",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyAlarmListRebuilt",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyAlarmListRebuilt",
-        "payload": "",
-        "payloadType": "date",
-        "x": 220,
-        "y": 880,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "5c8b20a14ea5863a",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyPotentialFaultyAlarmList",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyPotentialFaultyAlarmList",
-        "payload": "",
-        "payloadType": "date",
-        "x": 200,
-        "y": 920,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "f5d7d173f1ac5213",
-        "type": "comment",
-        "z": "c5746e29f53f72ce",
-        "name": "TS28532_FaultMnS.yaml",
-        "info": "",
-        "x": 130,
-        "y": 560,
-        "wires": []
-    },
-    {
-        "id": "c6687553f38611cd",
-        "type": "comment",
-        "z": "c5746e29f53f72ce",
-        "name": "TS28532_FileDataReportingMnS.yaml",
-        "info": "",
-        "x": 170,
-        "y": 440,
-        "wires": []
-    },
-    {
-        "id": "64720217524b2f2c",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "notifyFilePreparationError",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "notifyFilePreparationError",
-        "payload": "",
-        "payloadType": "date",
-        "x": 210,
-        "y": 520,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
-    },
-    {
-        "id": "e4ec70e46406674f",
+        "id": "b0f5987ab4bd1256",
         "type": "function",
-        "z": "c5746e29f53f72ce",
+        "z": "db7b8dca98eba850",
         "name": "http-preparation",
-        "func": "const protocol = env.get('MESSAGES_PROTOCOL');\nconst host = env.get('MESSAGES_HOST');\nconst port = env.get('MESSAGES_PORT');\nconst base = protocol + '://' + host + ':' + port;\nconst path = msg.topic;\nmsg.url = [base, path].join('/');\nreturn msg;",
+        "func": "const protocol = env.get('KAFKA_BRIDGE_PROTOCOL');\nconst host = env.get('KAFKA_BRIDGE_HOST');\nconst port = env.get('KAFKA_BRIDGE_PORT');\nconst base = protocol + '://' + host + ':' + port;\nconst group = env.get('KAFKA_BRIDGE_CONSUMER_GROUP');\nconst name = env.get('KAFKA_BRIDGE_CONSUMER_NAME');\nmsg.url = [base, 'consumers', group, 'instances', name, msg.topic].join('/');\nmsg.method = 'get';\nmsg.headers = {\n    accept: 'application/vnd.kafka.v2+json'\n}\nreturn msg;\n",
         "outputs": 1,
         "noerr": 0,
         "initialize": "",
         "finalize": "",
         "libs": [],
-        "x": 680,
-        "y": 180,
-        "wires": [
-            [
-                "3051f52553efaaa4"
-            ]
-        ]
-    },
-    {
-        "id": "58232148f55eafc9",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "heartbeat (deprecated)",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "60",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "heartbeat",
-        "payload": "",
-        "payloadType": "date",
-        "x": 210,
-        "y": 120,
+        "x": 340,
+        "y": 340,
         "wires": [
             [
-                "e5f66f4bd6777ca0"
+                "53aae16b268527f7"
             ]
         ]
     },
     {
-        "id": "23cf0bc0546d281b",
-        "type": "inject",
-        "z": "c5746e29f53f72ce",
-        "name": "fault (deprecated)",
-        "props": [
-            {
-                "p": "payload"
-            },
-            {
-                "p": "topic",
-                "vt": "str"
-            }
-        ],
-        "repeat": "60",
-        "crontab": "",
-        "once": false,
-        "onceDelay": 0.1,
-        "topic": "fault",
-        "payload": "",
-        "payloadType": "date",
-        "x": 230,
-        "y": 160,
-        "wires": [
-            [
-                "e5f66f4bd6777ca0"
-            ]
-        ]
+        "id": "ccf49a001b3e92d2",
+        "type": "comment",
+        "z": "db7b8dca98eba850",
+        "name": "Preparation",
+        "info": "",
+        "x": 90,
+        "y": 40,
+        "wires": []
     },
     {
         "id": "c5648c1528804847",
         "type": "function",
         "z": "7ba02ed596e8cde5",
         "name": "Consumer (new Data?)",
-        "func": "// read topic data from global context\nconst topicData = global.get('topicData');\n// init result as array\nlet result = [];\nif (Array.isArray(topicData)) {\n    result = topicData.filter(event => {\n        return event.event.commonEventHeader.stndDefinedNamespace === 'o-ran-supervision:supervision-notification';\n    }).map(event => {\n        return event.event.commonEventHeader.sourceName;;\n    });\n}\nmsg.payload = result;\nglobal.set('topicData', []);\nreturn msg; ",
+        "func": "// read topic data from global context\nconst topicData = global.get('topicData');\n// init result as array\nlet result = [];\nif (Array.isArray(topicData)) {\n    result = topicData.filter(event => {\n        return event.value.event.commonEventHeader.stndDefinedNamespace === 'o-ran-supervision:supervision-notification';\n    }).map(event => {\n        return event.value.event.commonEventHeader.sourceName;;\n    });\n}\nmsg.payload = result;\nglobal.set('topicData', []);\nreturn msg; ",
         "outputs": 1,
         "noerr": 0,
         "initialize": "",
index 7d5e497..e631bf9 100644 (file)
@@ -21,19 +21,13 @@ ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
 # Network settings
 # Please update /etc/docker/daemon.json accordingly
 # https://docs.docker.com/config/daemon/ipv6/
-NETWORK_SUBNET_SMO=2001:db8:1:40::/96
-NETWORK_GATEWAY_SMO=2001:db8:1:40::1
+NETWORK_SUBNET_DCN_IPv6=2001:db8:1:50::/96
 
-# traefik network
+# gateway network implemented by traefik
 SOLUTION_DOMAIN=smo.o-ran-sc.org
 TRAEFIK_IMAGE=traefik:v2.9
 TRAEFIK_LOG_LEVEL=DEBUG
-TRAEFIK_NETWORK_NAME=smo
-TRAEFIK_SUBNET=172.30.0.0/16
-TRAEFIK_SUBNET_IPv6=2001:db8:1:30::/64
-TRAEFIK_SUBNET_IPv6_PRE_STRING=2001:db8:1:30
-TRAEFIK_GATEWAY_IP=172.30.0.1
-TRAEFIK_GATEWAY_IPv6=${TRAEFIK_SUBNET_IPv6_PRE_STRING}:172:30:0:1
+TRAEFIK_NETWORK_NAME=dmz
 
 # Identity server
 IDENTITY_IMAGE=bitnami/keycloak:18.0.2
@@ -51,6 +45,7 @@ ZOOKEEPER_IMAGE=nexus3.onap.org:10001/onap/dmaap/zookeeper:6.0.3
 
 ## Kafka
 KAFKA_IMAGE=nexus3.onap.org:10001/onap/dmaap/kafka111:1.0.4
+KAFKA_BRIDGE_IMAGE=quay.io/strimzi/kafka-bridge:0.25.0
 
 ## Messages (DMaaP)
 DMAAP_IMAGE=nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18
index e89ab91..aa0422b 100755 (executable)
@@ -1,3 +1,18 @@
+################################################################################
+# Copyright 2023 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.
+#
 # no more versions needed! Compose spec supports all features w/o a version
 services:
 
@@ -18,6 +33,8 @@ services:
     ports:
       - 80:80
       - 443:443
+      - 4334:4334
+      - 4335:4335
     command:
       - --serverstransport.insecureskipverify=true
       - --log.level=${TRAEFIK_LOG_LEVEL}
@@ -34,6 +51,8 @@ services:
       - --entrypoints.websecure.address=:443
       - --entrypoints.websecure.http.tls.domains[0].main=gateway.${SOLUTION_DOMAIN}
       - --entrypoints.websecure.http.tls.domains[0].sans=*.${SOLUTION_DOMAIN}
+      - --entrypoints.ssh-netconf-callhome.address=:4334
+      - --entrypoints.tls-netconf-callhome.address=:4335
       - --providers.docker.endpoint=unix:///var/run/docker.sock
       - --providers.docker.network=${TRAEFIK_NETWORK_NAME}
       - --providers.docker.exposedByDefault=false
@@ -54,8 +73,8 @@ services:
       traefik.http.routers.gateway.tls: true
       traefik.http.services.gateway.loadbalancer.server.port: 8080
     networks:
-      - dmz
-      - default
+      dmz:
+      dcn:
 
   identitydb:
     image: ${IDENTITYDB_IMAGE}
@@ -105,6 +124,9 @@ services:
         condition: service_started
       gateway:
         condition: service_healthy
+    networks:
+      dmz:
+      default:
 
   persistence:
     image: ${PERSISTENCE_IMAGE}
@@ -115,8 +137,6 @@ services:
   zookeeper:
     image: ${ZOOKEEPER_IMAGE}
     container_name: zookeeper
-    # ports:
-    # - 2181:2181
     environment:
       ZOOKEEPER_REPLICAS: 1
       ZOOKEEPER_TICK_TIME: 2000
@@ -155,6 +175,34 @@ services:
       zookeeper:
         condition: service_started
 
+  kafka-bridge:
+    image: ${KAFKA_BRIDGE_IMAGE}
+    container_name: kafka-bridge
+    hostname: kafka-bridge
+    entrypoint: /opt/strimzi/bin/kafka_bridge_run.sh
+    command: --config-file=config/application.properties
+    healthcheck:
+      test: curl http://localhost:8080/healthy || exit 1
+      interval: 5s
+      timeout: 5s
+      retries: 5
+    labels:
+      traefik.enable: true
+      traefik.http.routers.kafka-bridge.entrypoints: websecure
+      traefik.http.routers.kafka-bridge.rule: Host(`kafka-bridge.${SOLUTION_DOMAIN}`)
+      traefik.http.routers.kafka-bridge.tls: true
+      traefik.http.services.kafka-bridge.loadbalancer.server.port: 8080
+    volumes:
+      - ./kafka-bridge:/opt/strimzi/config
+    depends_on:
+      kafka:
+        condition: service_started
+      gateway:
+        condition: service_healthy
+    networks:
+      dmz:
+      default:
+
   messages:
     image: ${DMAAP_IMAGE}
     container_name: messages
@@ -176,18 +224,24 @@ services:
         condition: service_started
       gateway:
         condition: service_healthy
+    networks:
+      dmz:
+      default:
 
 networks:
   dmz:
     name: dmz
     driver: bridge
     enable_ipv6: false
+  default:
+    name: smo
+    driver: bridge
+    enable_ipv6: false
+  dcn:
+    driver: bridge
+    name: dcn
+    enable_ipv6: true
     ipam:
       driver: default
       config:
-        - subnet: ${TRAEFIK_SUBNET}
-          gateway: ${TRAEFIK_GATEWAY_IP}
-        - subnet: ${TRAEFIK_SUBNET_IPv6}
-          gateway: ${TRAEFIK_GATEWAY_IPv6}
-  default:
-    name: ${TRAEFIK_NETWORK_NAME}
+      - subnet:  ${NETWORK_SUBNET_DCN_IPv6}
diff --git a/solution/smo/common/kafka-bridge/application.properties b/solution/smo/common/kafka-bridge/application.properties
new file mode 100644 (file)
index 0000000..893eb4e
--- /dev/null
@@ -0,0 +1,30 @@
+#Bridge related settings
+bridge.id=bridge1
+# uncomment one the following lines (bridge.tracing) to enable Jaeger tracing, check the documentation how to configure the tracer
+# OpenTracing support
+#bridge.tracing=jaeger
+# OpenTelemetry support
+#bridge.tracing=opentelemetry
+
+#Apache Kafka common
+kafka.bootstrap.servers=kafka:9092
+
+#Apache Kafka producer
+kafka.producer.acks=1
+
+#Apache Kafka consumer
+kafka.consumer.auto.offset.reset=earliest
+
+#HTTP related settings
+http.host=0.0.0.0
+http.port=8080
+#Enable CORS
+http.cors.enabled=false
+http.cors.allowedOrigins=*
+http.cors.allowedMethods=GET,POST,PUT,DELETE,OPTIONS,PATCH
+
+#Enable consumer
+http.consumer.enabled=true
+
+#Enable producer
+http.producer.enabled=true
\ No newline at end of file
diff --git a/solution/smo/common/kafka-bridge/log4j2.properties b/solution/smo/common/kafka-bridge/log4j2.properties
new file mode 100644 (file)
index 0000000..b5be6bb
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# The logging properties used
+#
+name = BridgeConfig
+
+appender.console.type = Console
+appender.console.name = STDOUT
+appender.console.layout.type = PatternLayout
+# %d{ISO8601}{GMT}Z |
+appender.console.layout.pattern = %d{ISO8601}{GMT}Z | %-5p | %-12.12c{1}:%L | %-12.12t | %m%n
+
+rootLogger.level = INFO
+rootLogger.appenderRefs = console
+rootLogger.appenderRef.console.ref = STDOUT
+rootLogger.additivity = false
+
+logger.bridge.name = io.strimzi.kafka.bridge
+logger.bridge.level = INFO
+logger.bridge.appenderRefs = console
+logger.bridge.appenderRef.console.ref = STDOUT
+logger.bridge.additivity = false
+
+# HTTP OpenAPI specific logging levels (default is INFO)
+# Logging healthy and ready endpoints is very verbose because of Kubernetes health checking.
+logger.healthy.name = http.openapi.operation.healthy
+logger.healthy.level = WARN
+logger.ready.name = http.openapi.operation.ready
+logger.ready.level = WARN
\ No newline at end of file
index 21b4380..f6cdb58 100644 (file)
@@ -21,18 +21,10 @@ ADMIN_USERNAME=admin
 ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
 
 # Network settings
-
 HOST_IP=aaa.bbb.ccc.ddd
-# Please update /etc/docker/daemon.json accordingly
-# https://docs.docker.com/config/daemon/ipv6/
-NETWORK_SUBNET_OAM_IPv4=172.50.0.0/24
-NETWORK_GATEWAY_OAM_IPv4=172.50.0.1
-NETWORK_SUBNET_OAM_IPv6=2001:db8:1:50::/96
-NETWORK_GATEWAY_OAM_IPv6=2001:db8:1:50::1
 
 # traefik network
 SOLUTION_DOMAIN=smo.o-ran-sc.org
-TRAEFIK_NETWORK_NAME=dmz
 
 # Identity server
 IDENTITY_PROVIDER_URL=https://identity.smo.o-ran-sc.org
@@ -40,8 +32,6 @@ IDENTITY_PROVIDER_URL=https://identity.smo.o-ran-sc.org
 # SDN Controller
 SDNC_IMAGE=nexus3.onap.org:10001/onap/sdnc-image:2.4.2
 SDNC_REST_PORT=8181
-SDNC_OAM_IPv4=172.50.0.23
-SDNC_OAM_IPv6=2001:db8:1:50::23
 SDNC_CERT_DIR=/opt/opendaylight/current/certs
 
 # SDN Controller Web
@@ -50,8 +40,6 @@ SDNC_WEB_PORT=8080
 
 ## VES Collector
 VES_COLLECTOR_IMAGE=nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.10.1
-VES_COLLECTOR_OAM_IPv4=172.50.0.27
-VES_COLLECTOR_OAM_IPv6=2001:db8:1:50::27
 VES_COMMON_HEADER_VERSION=7.2.1
 VES_ENDPOINT_PROTOCOL=http
 VES_ENDPOINT_PORT=8080
index b778170..d6e9438 100755 (executable)
@@ -1,3 +1,19 @@
+################################################################################
+# Copyright 2023 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.
+#
+
 # no more versions needed! Compose spec supports all features w/o a version
 services:
 
@@ -22,6 +38,7 @@ services:
       controller:
         condition: service_healthy
     networks:
+      dmz:
       smo:
 
   controller:
@@ -29,16 +46,13 @@ services:
     container_name: controller
     hostname: controller
     extra_hosts:
-      - "identity.smo.o-ran-sc.org:${HOST_IP}"
+      - "controller.dcn.smo.o-ran-sc.org:${HOST_IP}"
     healthcheck:
-      test: wget -U ${ADMIN_USERNAME}:${ADMIN_PASSWORD} --no-verbose --tries=1 --spider http://localhost:${SDNC_REST_PORT}/ready || exit 1
+      test: wget --no-verbose --tries=1 --spider http://localhost:${SDNC_REST_PORT}/ready || exit 1
       start_period: 60s
       interval: 10s
       timeout: 5s
       retries: 5
-    ports:
-      - 4334:4334
-      - 4335:4335
     environment:
       ENABLE_ODL_CLUSTER: false
       ENABLE_OAUTH: true
@@ -78,14 +92,24 @@ services:
     labels:
       traefik.enable: true
       traefik.http.routers.controller.entrypoints: websecure
-      traefik.http.routers.controller.rule: Host(`controller.oam.${SOLUTION_DOMAIN}`)
+      traefik.http.routers.controller.rule: Host(`controller.dcn.${SOLUTION_DOMAIN}`)
       traefik.http.routers.controller.tls: true
       traefik.http.services.controller.loadbalancer.server.port: ${SDNC_REST_PORT}
+
+      traefik.tcp.routers.controller-ssh.entrypoints: ssh-netconf-callhome
+      traefik.tcp.routers.controller-ssh.rule: HostSNI(`*`)
+      traefik.tcp.routers.controller-ssh.tls: false
+      traefik.tcp.routers.controller-ssh.service: controller-ssh
+      traefik.tcp.services.controller-ssh.loadbalancer.server.port: 4334
+
+      traefik.tcp.routers.controller-tls.entrypoints: tls-netconf-callhome
+      traefik.tcp.routers.controller-tls.rule: HostSNI(`*`)
+      traefik.tcp.routers.controller-tls.tls: false
+      traefik.tcp.routers.controller-tls.service: controller-tls
+      traefik.tcp.services.controller-tls.loadbalancer.server.port: 4335
     networks:
       smo:
-      default:
-        ipv4_address: ${SDNC_OAM_IPv4}
-        ipv6_address: ${SDNC_OAM_IPv6}
+      dcn:
 
   ves-collector:
     image: ${VES_COLLECTOR_IMAGE}-configured
@@ -95,6 +119,8 @@ services:
         - BASEIMAGE=${VES_COLLECTOR_IMAGE}
     container_name: ves-collector
     hostname: ves-collector
+    extra_hosts:
+      - "ves-collector.dcn.${SOLUTION_DOMAIN}:${HOST_IP}"
     healthcheck:
       test: curl -k -u ${VES_ENDPOINT_USERNAME}:${VES_ENDPOINT_PASSWORD} ${VES_ENDPOINT_PROTOCOL}://localhost:${VES_ENDPOINT_PORT} || exit 1
       start_period: 1s
@@ -109,26 +135,17 @@ services:
     labels:
       traefik.enable: true
       traefik.http.routers.ves.entrypoints: websecure
-      traefik.http.routers.ves.rule: Host(`ves-collector.oam.${SOLUTION_DOMAIN}`)
+      traefik.http.routers.ves.rule: Host(`ves-collector.dcn.${SOLUTION_DOMAIN}`)
       traefik.http.routers.ves.tls: true
       traefik.http.services.ves.loadbalancer.server.port: ${VES_ENDPOINT_PORT}
     networks:
       smo:
-      default:
-        ipv4_address: ${VES_COLLECTOR_OAM_IPv4}
-        ipv6_address: ${VES_COLLECTOR_OAM_IPv6}
+      dcn:
 
 networks:
+  dmz:
+    external: true
   smo:
     external: true
-  default:
-    driver: bridge
-    name: oam
-    enable_ipv6: true
-    ipam:
-      driver: default
-      config:
-      - subnet:  ${NETWORK_SUBNET_OAM_IPv4}
-        gateway: ${NETWORK_GATEWAY_OAM_IPv4}
-      - subnet:  ${NETWORK_SUBNET_OAM_IPv6}
-        gateway: ${NETWORK_GATEWAY_OAM_IPv6}
+  dcn:
+    external: true