From: Martin Skorupski Date: Tue, 4 Jul 2023 15:20:12 +0000 (+0000) Subject: Merge "Adopt new docs/tox API" X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=660fe5384e6f0652e8754e0f2365b4f5355a49c5;hp=5edb57e2d03c1dab6e59eb1b43adde1944a400d8;p=oam.git Merge "Adopt new docs/tox API" --- diff --git a/solution/README-O-RU-Controller.md b/solution/README-O-RU-Controller.md index 8d81611..c652f1e 100644 --- a/solution/README-O-RU-Controller.md +++ b/solution/README-O-RU-Controller.md @@ -83,9 +83,11 @@ $ cat /etc/hosts gateway.smo.o-ran-sc.org identity.smo.o-ran-sc.org messages.smo.o-ran-sc.org - ves-collector.oam.smo.o-ran-sc.org odlux.oam.smo.o-ran-sc.org - controller.oam.smo.o-ran-sc.org + flows.oam.smo.o-ran-sc.org + tests.oam.smo.o-ran-sc.org + ves-collector.dcn.smo.o-ran-sc.org + controller.dcn.smo.o-ran-sc.org ``` diff --git a/solution/README.md b/solution/README.md index d01e664..273e707 100644 --- a/solution/README.md +++ b/solution/README.md @@ -115,12 +115,15 @@ $ cat /etc/hosts # SMO OAM development system smo.o-ran-sc.org - gateway.smo.o-ran-sc.org + gateway.smo.o-ran-sc.org identity.smo.o-ran-sc.org messages.smo.o-ran-sc.org - ves-collector.oam.smo.o-ran-sc.org + kafka-bridge.smo.o-ran-sc.org odlux.oam.smo.o-ran-sc.org - controller.oam.smo.o-ran-sc.org + flows.oam.smo.o-ran-sc.org + tests.oam.smo.o-ran-sc.org + controller.dcn.smo.o-ran-sc.org + ves-collector.dcn.smo.o-ran-sc.org ``` diff --git a/solution/network/.env b/solution/network/.env index 56d92e2..5a10558 100644 --- a/solution/network/.env +++ b/solution/network/.env @@ -14,29 +14,29 @@ # 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 diff --git a/solution/network/config.py b/solution/network/config.py index a717dbb..c89cb1e 100644 --- a/solution/network/config.py +++ b/solution/network/config.py @@ -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): diff --git a/solution/network/docker-compose.yml b/solution/network/docker-compose.yml index 9fd388e..d8e2ed9 100755 --- a/solution/network/docker-compose.yml +++ b/solution/network/docker-compose.yml @@ -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} diff --git a/solution/smo/apps/.env b/solution/smo/apps/.env index d891cf5..756ef69 100644 --- a/solution/smo/apps/.env +++ b/solution/smo/apps/.env @@ -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 diff --git a/solution/smo/apps/docker-compose.yml b/solution/smo/apps/docker-compose.yml index e3a60e3..ce4eb45 100644 --- a/solution/smo/apps/docker-compose.yml +++ b/solution/smo/apps/docker-compose.yml @@ -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 diff --git a/solution/smo/apps/flows/data/.sessions.json b/solution/smo/apps/flows/data/.sessions.json index 2ab160f..7465973 100644 --- a/solution/smo/apps/flows/data/.sessions.json +++ b/solution/smo/apps/flows/data/.sessions.json @@ -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 diff --git a/solution/smo/apps/flows/data/flows.json b/solution/smo/apps/flows/data/flows.json index e16c5e6..5f65a8c 100644 --- a/solution/smo/apps/flows/data/flows.json +++ b/solution/smo/apps/flows/data/flows.json @@ -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": [] }, { @@ -250,13 +250,13 @@ "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": [] }, @@ -277,7 +277,7 @@ ], "repeat": "3", "crontab": "", - "once": true, + "once": false, "onceDelay": 0.1, "topic": "notifyHeartbeat", "payload": "", @@ -473,7 +473,7 @@ "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": "", @@ -522,7 +522,7 @@ "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": "", @@ -1631,38 +1631,9 @@ ] }, { - "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, @@ -1672,16 +1643,15 @@ "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" @@ -1693,55 +1663,26 @@ ], "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", @@ -1751,87 +1692,67 @@ "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" @@ -1843,24 +1764,43 @@ ], "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" @@ -1872,25 +1812,44 @@ ], "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": "", @@ -1901,19 +1860,36 @@ "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" @@ -1925,34 +1901,43 @@ ], "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" @@ -1962,26 +1947,26 @@ "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" @@ -1993,24 +1978,24 @@ ], "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" @@ -2022,25 +2007,24 @@ ], "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" @@ -2052,55 +2036,43 @@ ], "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" @@ -2112,1031 +2084,47 @@ ], "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", @@ -3252,7 +2240,7 @@ "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": "", diff --git a/solution/smo/common/.env b/solution/smo/common/.env index 7d5e497..e631bf9 100644 --- a/solution/smo/common/.env +++ b/solution/smo/common/.env @@ -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 diff --git a/solution/smo/common/docker-compose.yml b/solution/smo/common/docker-compose.yml index e89ab91..aa0422b 100755 --- a/solution/smo/common/docker-compose.yml +++ b/solution/smo/common/docker-compose.yml @@ -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 index 0000000..893eb4e --- /dev/null +++ b/solution/smo/common/kafka-bridge/application.properties @@ -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 index 0000000..b5be6bb --- /dev/null +++ b/solution/smo/common/kafka-bridge/log4j2.properties @@ -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 diff --git a/solution/smo/oam/.env b/solution/smo/oam/.env index 21b4380..f6cdb58 100644 --- a/solution/smo/oam/.env +++ b/solution/smo/oam/.env @@ -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 diff --git a/solution/smo/oam/docker-compose.yml b/solution/smo/oam/docker-compose.yml index b778170..d6e9438 100755 --- a/solution/smo/oam/docker-compose.yml +++ b/solution/smo/oam/docker-compose.yml @@ -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