From: demx8as6 Date: Sun, 6 Jun 2021 14:05:58 +0000 (+0200) Subject: Update deployment option "integration" X-Git-Tag: 2.2.0~11^2 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=a93cb37412d81b4034fd6005d009d6bac412a6d9;p=oam.git Update deployment option "integration" - The entire integration folder was refactured. - Please follow the instruction in README.md Issue-Id: OAM-217 Change-Id: I7822fd928ee759ff4738f9673a4320e2409772e7 Signed-off-by: demx8as6 --- diff --git a/solution/integration/README.md b/solution/integration/README.md index b58cbcc..0c39c32 100644 --- a/solution/integration/README.md +++ b/solution/integration/README.md @@ -1 +1,255 @@ -# Setups for integration test +# Service Management and Orchestration (SMO) + +##### Table of Contents +[Service Management and Orchestration (SMO)](#service-management-and-orchestration-smo) +- [Introduction](#introduction) +- [Overview](#overview) +- [Prerequisites](#prerequisites) +- [Usage](#usage) + - [Bring Up Solution](#bring-up-solution) + - [Log files and karaf console](#log-files-and-karaf-console) + - [Customizing Solution](#customizing-solution) + - [Verification Solution](#verification-solution) + - [Access to SDN-R UX](#access-to-sdn-r-ux) + - [Terminate solution](#terminate-solution) + - [Cleanup](#cleanup) + - [Troubleshooting](#troubleshooting) + +## Introduction + +With respect to OAM the SMO implements the O1-interface consumers. According to the O-RAN OAM Architecture and the O-RAN OAM Interface Specification, the SMO implements a NetConf Client for configuration and a HTTP/REST/VES server for receiving all kind of events in a VES format. + +The setup contains an OpenDaylight based NetConf client and a VES Collector. + +## Overview + +This docker-compose file starts a pre-configured, self-contained SDN-R solution +for developer test or demo purposes + + * **Identity** + ... representing an KeyCloak based identity service for centralized user + management. Please note that the implementation does not support IPv6. + Therefore, its own network is required called 'DMZ'. + + * **SDN-R** single node instance + + ... representing the NetConf consumer on the Service Management and + Orchestration framework (SMO) for the O1 interface based on + ODL-Silicon/ONAP-Istanbul + + * **VES collector** + + ... representing the VES (REST) provider at SMO for all kind of events. + + * **DMaaP** + ... representing SMO DMaaP component, includes message-router + +## Prerequisites + +``` +$ cat /etc/os-release | grep PRETTY_NAME +PRETTY_NAME="Ubuntu 20.04.2 LTS" + +$ docker --version +Docker version 20.10.2, build 20.10.2-0ubuntu1~20.04.2 + +$ docker-compose version +docker-compose version 1.29.1, build c34c88b2 +docker-py version: 5.0.0 +CPython version: 3.7.10 +OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019 + +$ git --version +git version 2.25.1 + +``` +Please modify the /etc/hosts of your system. + +* : is the hostname of the system, where the browser is started + +* : is the IP address of the system where the solution will be deployed + +For development purposes and may reference the same system. + +``` +$ cat /etc/hosts +127.0.0.1 localhost +127.0.1.1 + sdnc-web + identity +``` + +## Expected Folder Structure + +``` +├── network +│ ├── .env +│ ├── config.py +│ ├── docker-compose.yml +│ │ +│ ├── ntsim-ng-o-du +│ └── ntsim-ng-o-ru +└── smo + ├── common + │ ├── .env + │ ├── docker-compose.yml + │ │ + │ ├── dmaap + │ ├── docker + │ ├── identity + │ ├── kafka + │ └── zookeeper + ├── non-rt-ric + │ ├── .env + │ ├── docker-compose.yml + │ │ + │ └── + └── oam + ├── docker-compose.yml + │ + ├── sdnc-web + ├── sdnr + └── ves-collector +``` + +## Usage + +### Bring Up Solution + +#### Check (adjust if required) environment variables + +``` +nano smo/common/.env +nano smo/non-rt-ric/.env +nano smo/oam/.env +nano network/.env +``` + +#### Startup solution + +Please note that it is necessary to configure first the identity service, +before starting further docker images. + +The several docker-compose yml files must be started in the right order as listed below: + +``` +docker-compose -f smo/common/docker-compose.yml up -d +python smo/common/identity/config.py +``` + +The python script configure the users within the identity service (keycloak). +A system user (%USER) is also created with administration rights. + +``` +docker-compose -f smo/non-rt-ric/docker-compose.yml up -d +docker-compose -f smo/oam/docker-compose.yml up -d +``` + +Please wait about 2min until all the service are up and running. +If you see the login page (https://sdnc-web:8453) you are good to go and can start the (simulated) network. + +``` +docker-compose -f network/docker-compose.yml up -d +``` + +Usually the first ves:event gets lost. Please restart the O-DU docker container(s) to send a second ves:pnfRegistration. + +``` +docker-compose -f network/docker-compose.yml restart ntsim-ng-o-du-1122 +python network/config.py +``` + +The python script configures the simulated O-DU and O-RU according to O-RAN hybrid architecture. + +O-DU - NETCONF Call HOME and NETCONF notifications +O-RU - ves:pnfRegistration and ves:fault, ves:heartbeat + + +![ves:pnfRegistration in ODLUX](docs/nstim-ng-connected-after-ves-pnf-registration-in-odlux.png "ves:pnfRegistration in ODLUX") + +'True' indicated that the settings through SDN-R to the NETCONF server were +successful. + +SDN-R reads the fault events from DMaaP and processes them. +Finally the fault events are visible in ODLUX. + +![ves:fault in ODLUX](docs/ves-fault-in-odlux.png "ves:fault in ODLUX") + + +### Log files and karaf console + +#### ODL karaf.logs + +``` +docker exec -it sdnr tail -f /opt/opendaylight/data/log/karaf.log +``` + +#### karaf console access (karaf:karaf) + +``` +ssh karaf@localhost -p 8101 +``` + +#### ves-collector logs + +``` +docker logs -f ves-collector +``` + +### Customizing Solution + +'.env' file contains customizing parameters + +### Verification Solution + +#### Access to SDN-R ODLUX + +##### Login into SDN-R + + https://sdnc-web:8453 + + User: admin // see .env file + + Password: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U + +In case of trouble, please update the commands with your customized '.env' file. + +### Terminate solution + +To stop all container please respect the following order + +``` +docker-compose -f network/docker-compose.yml down +docker-compose -f smo/oam/docker-compose.yml down +docker-compose -f smo/non-rt-ric/docker-compose.yml down +docker-compose -f smo/common/docker-compose.yml down +``` + +### Cleanup + +!!! be careful if other stopped containers are on the same system +``` +docker system prune -a -f +``` +### Troubleshooting + +In most cases the .env setting do not fit to the environment and need to be +adjusted. + +Please make sure that the network settings to not overlap with other networks. + +The commands ... +``` +docker ps -a +docker-compose ps + +## Prerequisites +# python3, tmux, libtmux +tmux new-session -n workspace -s integration + +# within tmux session +python tmux-logging.py +``` +... are your friends. + +![tmux logging](docs/tmux-logging.png "tmux logging") \ No newline at end of file diff --git a/solution/integration/docs/nstim-ng-connected-after-ves-pnf-registration-in-odlux.png b/solution/integration/docs/nstim-ng-connected-after-ves-pnf-registration-in-odlux.png new file mode 100644 index 0000000..feadd17 Binary files /dev/null and b/solution/integration/docs/nstim-ng-connected-after-ves-pnf-registration-in-odlux.png differ diff --git a/solution/integration/docs/tmux-logging.png b/solution/integration/docs/tmux-logging.png new file mode 100644 index 0000000..b6ff3d1 Binary files /dev/null and b/solution/integration/docs/tmux-logging.png differ diff --git a/solution/integration/docs/ves-fault-in-odlux.png b/solution/integration/docs/ves-fault-in-odlux.png new file mode 100644 index 0000000..43bfad7 Binary files /dev/null and b/solution/integration/docs/ves-fault-in-odlux.png differ diff --git a/solution/integration/network/.env b/solution/integration/network/.env new file mode 100644 index 0000000..4929cc9 --- /dev/null +++ b/solution/integration/network/.env @@ -0,0 +1,57 @@ +################################################################################ +# Copyright 2021 highstreet technologies and others +# +# 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. +# + +COMPOSE_PROJECT_NAME=o-ran-sc-d-release + +# Credentials +ADMIN_USERNAME=admin +ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U + +# SDN Controller +SDNC_REST_PORT=8181 +SDNC_OAM_IPv6=2001:db8:1:50::23 + +# VES Collector +VES_COLLECTOR_OAM_IPv6=2001:db8:1:50::27 + +# NTS NG settings +PUBLIC_DOCKER_REPO=docker.io/hightec/ +NEXUS3_DOCKER_REPO=nexus3.o-ran-sc.org:10004/o-ran-sc/ +NTS_MANAGER_PORT=8300 +NTS_BUILD_VERSION=1.3.3 + +IPv6_ENABLED=true +SSH_CONNECTIONS=0 +TLS_CONNECTIONS=1 +NTS_HOST_IP=2a00:7b80:454:2000::2 +NTS_HOST_BASE_PORT=50000 +NTS_HOST_NETCONF_SSH_BASE_PORT=0 +NTS_HOST_NETCONF_TLS_BASE_PORT=1000 +NTS_HOST_TRANSFER_FTP_BASE_PORT=2000 +NTS_HOST_TRANSFER_SFTP_BASE_PORT=2000 + +NTS_NF_MOUNT_POINT_ADDRESSING_METHOD=docker-mapping + +SDN_CONTROLLER_PROTOCOL=http +SDN_CONTROLLER_CALLHOME_PORT=6666 +# TLS: SDN_CONTROLLER_CALLHOME_PORT=4335 + +VES_COMMON_HEADER_VERSION=7.2.1 +VES_ENDPOINT_PROTOCOL=https +VES_ENDPOINT_PORT=8443 +VES_ENDPOINT_AUTH_METHOD=basic-auth +VES_ENDPOINT_USERNAME=sample1 +VES_ENDPOINT_PASSWORD=sample1 diff --git a/solution/integration/network/config.py b/solution/integration/network/config.py new file mode 100644 index 0000000..f1fd0f3 --- /dev/null +++ b/solution/integration/network/config.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +################################################################################ +# Copyright 2021 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. +# + +# importing the sys, json, requests library +import os +import sys +import json +import requests +import subprocess + +dockerFilter = subprocess.check_output("docker ps --format '{{.Names}}'", shell=True) +containers = dockerFilter.splitlines() + +mapping = dict({"ntsim-ng-o-ru": "highstreet-O-RU", "ntsim-ng-o-du": "highstreet-O-DU"}) +# base = 'https://sdnc-web:8453' +base = 'https://localhost:8453' +username = 'admin' +password = 'Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U' + +# REST to set event settings +def configEventSettings(nfName, nfType): + file = os.path.dirname(os.path.abspath(__file__)) + '/' + nfType + '/event-settings.json' + with open(file) as json_file: + body = json.load(json_file) + url = base + '/rests/data/network-topology:network-topology/topology=topology-netconf/node=' + nfName + '/yang-ext:mount/nts-network-function:simulation/network-function' + headers = { + 'content-type': 'application/yang-data+json', + 'accept': 'application/yang-data+json' + } + try: + response = requests.put(url, verify=False, auth=(username, password), json=body, headers=headers) + except requests.exceptions.Timeout: + sys.exit('HTTP request failed, please check you internet connection.') + except requests.exceptions.TooManyRedirects: + sys.exit('HTTP request failed, please check your proxy settings.') + except requests.exceptions.RequestException as e: + # catastrophic error. bail. + raise SystemExit(e) + + return response.status_code >= 200 and response.status_code < 300 + +# main +for container in containers: + name = container.decode("utf-8") + if "ntsim-ng" in name: + if "ntsim-ng-o-ru" in name: + nfName = mapping["ntsim-ng-o-ru"] + name[name.rindex("-"):] + print("Set", nfName, configEventSettings(nfName, "ntsim-ng-o-ru")) + if "ntsim-ng-o-du" in name: + nfName = mapping["ntsim-ng-o-du"] + name[name.rindex("-"):] + print("Set", nfName, configEventSettings(nfName, "ntsim-ng-o-du")) diff --git a/solution/integration/network/docker-compose.yml b/solution/integration/network/docker-compose.yml new file mode 100755 index 0000000..a07b98d --- /dev/null +++ b/solution/integration/network/docker-compose.yml @@ -0,0 +1,137 @@ +################################################################################ +# Copyright 2021 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. +# +version: '3.8' + +x-common_env: &common_env + IPv6_ENABLED: ${IPv6_ENABLED} + SSH_CONNECTIONS: ${SSH_CONNECTIONS} + TLS_CONNECTIONS: ${TLS_CONNECTIONS} + NTS_NF_MOUNT_POINT_ADDRESSING_METHOD: ${NTS_NF_MOUNT_POINT_ADDRESSING_METHOD} + + NTS_HOST_IP: ${NTS_HOST_IP} + NTS_HOST_BASE_PORT: ${NTS_HOST_BASE_PORT} + NTS_HOST_NETCONF_SSH_BASE_PORT: ${NTS_HOST_NETCONF_SSH_BASE_PORT} + NTS_HOST_NETCONF_TLS_BASE_PORT: ${NTS_HOST_NETCONF_TLS_BASE_PORT} + NTS_HOST_TRANSFER_FTP_BASE_PORT: ${NTS_HOST_TRANSFER_FTP_BASE_PORT} + NTS_HOST_TRANSFER_SFTP_BASE_PORT: ${NTS_HOST_TRANSFER_SFTP_BASE_PORT} + + SDN_CONTROLLER_PROTOCOL: ${SDN_CONTROLLER_PROTOCOL} + SDN_CONTROLLER_IP: ${SDNC_OAM_IPv6} + SDN_CONTROLLER_PORT: ${SDNC_REST_PORT} + SDN_CONTROLLER_CALLHOME_PORT: ${SDN_CONTROLLER_CALLHOME_PORT} + 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_IPv6} + VES_ENDPOINT_PORT: ${VES_ENDPOINT_PORT} + VES_ENDPOINT_AUTH_METHOD: ${VES_ENDPOINT_AUTH_METHOD} + VES_ENDPOINT_USERNAME: ${VES_ENDPOINT_USERNAME} + VES_ENDPOINT_PASSWORD: ${VES_ENDPOINT_PASSWORD} + +x-du_env: &du_env + NTS_NF_STANDALONE_START_FEATURES: "datastore-populate ves-heartbeat ves-file-ready ves-pnf-registration web-cut-through" + +x-ru-env: &ru_env + NTS_NF_STANDALONE_START_FEATURES: "datastore-populate netconf-call-home web-cut-through" + +x-topo-env: &topo_env + NTS_NF_STANDALONE_START_FEATURES: "datastore-populate netconf-call-home web-cut-through" + +x-nf: &common_nf + stop_grace_period: 5m + cap_add: + - SYS_ADMIN + - SYS_PTRACE + +services: + ntsim-ng-o-du-1122: + <<: *common_nf + image: "${NEXUS3_DOCKER_REPO}nts-ng-o-ran-du:${NTS_BUILD_VERSION}" + container_name: ntsim-ng-o-du-1122 + hostname: highstreet-O-DU-1122 + volumes: + - ./ntsim-ng-o-du/config.json:/opt/dev/ntsim-ng/config/config.json + - ./ntsim-ng-o-du/o-ran-sc-du-hello-world-running.xml:/opt/dev/deploy/data/o-ran-sc-du-hello-world-running.xml + - ./ntsim-ng-o-du/o-ran-sc-du-hello-world-operational.xml:/opt/dev/deploy/data/o-ran-sc-du-hello-world-operational.xml + environment: + <<: *common_env + <<: *du_env + + ntsim-ng-o-ru-fh-11221: + <<: *common_nf + image: "${NEXUS3_DOCKER_REPO}nts-ng-o-ran-ru-fh:${NTS_BUILD_VERSION}" + container_name: ntsim-ng-o-ru-fh-11221 + hostname: highstreet-O-RU-11221 + volumes: + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/config.json:/opt/dev/ntsim-ng/config/config.json + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-operational.json:/opt/dev/deploy/data/ietf-hardware-operational.json + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-running.json:/opt/dev/deploy/data/ietf-hardware-running.json + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml + environment: + <<: *common_env + <<: *ru_env + + ntsim-ng-o-ru-fh-11222: + <<: *common_nf + image: "${NEXUS3_DOCKER_REPO}nts-ng-o-ran-ru-fh:${NTS_BUILD_VERSION}" + container_name: ntsim-ng-o-ru-fh-11222 + hostname: highstreet-O-RU-11222 + volumes: + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/config.json:/opt/dev/ntsim-ng/config/config.json + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-operational.json:/opt/dev/deploy/data/ietf-hardware-operational.json + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-running.json:/opt/dev/deploy/data/ietf-hardware-running.json + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml + environment: + <<: *common_env + <<: *ru_env + + ntsim-ng-o-ru-fh-11223: + <<: *common_nf + image: "${NEXUS3_DOCKER_REPO}nts-ng-o-ran-ru-fh:${NTS_BUILD_VERSION}" + container_name: ntsim-ng-o-ru-fh-11223 + hostname: highstreet-O-RU-11223 + volumes: + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/config.json:/opt/dev/ntsim-ng/config/config.json + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-operational.json:/opt/dev/deploy/data/ietf-hardware-operational.json + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-running.json:/opt/dev/deploy/data/ietf-hardware-running.json + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml + - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml + environment: + <<: *common_env + <<: *ru_env + + ntsim-ng-topology-server: + <<: *common_nf + image: "${PUBLIC_DOCKER_REPO}smo-nts-ng-topology-server:${NTS_BUILD_VERSION}" + container_name: ntsim-ng-topology-server + hostname: highstreet-TAPI-topology-server + volumes: + - ./ntsim-ng-topology-server/config.json:/opt/dev/ntsim-ng/config/config.json + - ./ntsim-ng-topology-server/tapi-common-operational.xml:/opt/dev/deploy/data/tapi-common-operational.xml + - ./ntsim-ng-topology-server/tapi-common-running.xml:/opt/dev/deploy/data/tapi-common-running.xml + environment: + <<: *common_env + <<: *topo_env + SSH_CONNECTIONS: 1 + TLS_CONNECTIONS: 0 +networks: + default: + external: + name: oam diff --git a/solution/integration/network/ntsim-ng-o-du/config.json b/solution/integration/network/ntsim-ng-o-du/config.json new file mode 100644 index 0000000..299a6cf --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-du/config.json @@ -0,0 +1,136 @@ +{ + "container-rules": { + "excluded-modules": [], + "excluded-features": [] + }, + + "supervisor-rules": { + "netopeer": { + "path": "/usr/local/bin/netopeer2-server", + "args": ["-d", "-v2"], + "autorestart": true, + "stdout": "log/netopeer-stdout.log", + "stderr": "log/netopeer-stderr.log" + }, + + "ntsim-network-function": { + "path": "/opt/dev/ntsim-ng/ntsim-ng", + "args": ["-w/opt/dev/ntsim-ng", "-f"], + "nomanual": true + } + }, + + "datastore-random-generation-rules" : { + "excluded-modules": [ + "sysrepo", + "sysrepo-monitoring", + "ietf-yang-library", + "ietf-netconf-acm", + "ietf-netconf-monitoring", + "nc-notifications", + "ietf-keystore", + "ietf-truststore", + "ietf-system", + "ietf-netconf-server", + "nts-network-function" + ], + + "default-list-instances": 2, + "custom-list-instances" : [] + }, + + "datastore-populate-rules": { + "random-generation-enabled": true, + + "pre-generated-operational-data": [ + "/opt/dev/deploy/data/o-ran-sc-du-hello-world-operational.xml" + ], + "pre-generated-running-data": [ + "/opt/dev/deploy/data/o-ran-sc-du-hello-world-running.xml" + ] + }, + + "fault-rules" : { + "yang-notif-template" : "$$uint16_counter$$%%object%%%%affected-object%%%%fault-severity%%%%cleared%%%%text%%%%date-time%%", + "choosing-method" : "linear", + "faults" : [ + { + "condition" : "O-RU Port Down", + "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11221']", + "severity" : "CRITICAL", + "date-time" : "$$time$$", + "specific-problem" : "O-RU Port Down", + + "fault-severity" : "CRITICAL", + "affected-object" : "%%object%%", + "cleared" : "false", + "text" : "O-RU Port Down" + }, + + { + "condition" : "O-RU Port Down", + "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11221']", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "O-RU Port Down", + + "fault-severity" : "CRITICAL", + "affected-object" : "%%object%%", + "cleared" : "true", + "text" : "O-RU Port Down" + }, + + { + "condition" : "O-RU Port Down", + "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11222']", + "severity" : "CRITICAL", + "date-time" : "$$time$$", + "specific-problem" : "O-RU Port Down", + + "fault-severity" : "CRITICAL", + "affected-object" : "%%object%%", + "cleared" : "false", + "text" : "O-RU Port Down" + }, + + { + "condition" : "O-RU Port Down", + "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11222']", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "O-RU Port Down", + + "fault-severity" : "CRITICAL", + "affected-object" : "%%object%%", + "cleared" : "true", + "text" : "O-RU Port Down" + }, + + { + "condition" : "O-RU Port Down", + "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11223']", + "severity" : "CRITICAL", + "date-time" : "$$time$$", + "specific-problem" : "O-RU Port Down", + + "fault-severity" : "CRITICAL", + "affected-object" : "%%object%%", + "cleared" : "false", + "text" : "O-RU Port Down" + }, + + { + "condition" : "O-RU Port Down", + "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11223']", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "O-RU Port Down", + + "fault-severity" : "CRITICAL", + "affected-object" : "%%object%%", + "cleared" : "true", + "text" : "O-RU Port Down" + } + ] + } +} \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-o-du/event-settings.json b/solution/integration/network/ntsim-ng-o-du/event-settings.json new file mode 100644 index 0000000..108b10a --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-du/event-settings.json @@ -0,0 +1,23 @@ +{ + "nts-network-function:network-function": { + "fault-generation": { + "fault-delay-list": [ + { + "index": 0, + "delay-period": 20 + } + ] + }, + "ves": { + "pnf-registration": true, + "faults-enabled": true, + "heartbeat-period": 120 + }, + "netconf": { + "faults-enabled": false, + "call-home": false + }, + "mount-point-addressing-method": "docker-mapping", + "function-type": "NTS_FUNCTION_TYPE_O_RAN_O_DU" + } + } \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-operational.xml b/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-operational.xml new file mode 100644 index 0000000..c2d132a --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-operational.xml @@ -0,0 +1,20 @@ + + + highstreet-O-RU-11221 + LOCKED + ENABLED + disconnected + + + highstreet-O-RU-11222 + UNLOCKED + ENABLED + connected + + + highstreet-O-RU-11223 + LOCKED + DISABLED + unable-to-connect + + \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-running.xml b/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-running.xml new file mode 100644 index 0000000..d1d7e74 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-running.xml @@ -0,0 +1,14 @@ + + + highstreet-O-RU-11221 + UNLOCKED + + + highstreet-O-RU-11222 + LOCKED + + + highstreet-O-RU-11223 + LOCKED + + \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-o-ru/event-settings.json b/solution/integration/network/ntsim-ng-o-ru/event-settings.json new file mode 100644 index 0000000..ff875de --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/event-settings.json @@ -0,0 +1,27 @@ +{ + "nts-network-function:network-function": { + "fault-generation": { + "fault-delay-list": [ + { + "index": 0, + "delay-period": 10 + }, + { + "index": 1, + "delay-period": 30 + } + ] + }, + "ves": { + "pnf-registration": false, + "faults-enabled": false, + "heartbeat-period": 0 + }, + "netconf": { + "faults-enabled": true, + "call-home": true + }, + "mount-point-addressing-method": "docker-mapping", + "function-type": "NTS_FUNCTION_TYPE_O_RAN_O_RU_FH" + } + } \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/config.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/config.json new file mode 100644 index 0000000..0374876 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/config.json @@ -0,0 +1,136 @@ +{ + "container-rules": { + "excluded-modules": [], + "excluded-features": [] + }, + + "supervisor-rules": { + "netopeer": { + "path": "/usr/local/bin/netopeer2-server", + "args": ["-d", "-v2"], + "autorestart": true, + "stdout": "log/netopeer-stdout.log", + "stderr": "log/netopeer-stderr.log" + }, + + "ntsim-network-function": { + "path": "/opt/dev/ntsim-ng/ntsim-ng", + "args": ["-w/opt/dev/ntsim-ng", "-f"], + "nomanual": true + } + }, + + "datastore-random-generation-rules" : { + "excluded-modules": [ + "sysrepo", + "sysrepo-monitoring", + "ietf-yang-library", + "ietf-netconf-acm", + "ietf-netconf-monitoring", + "nc-notifications", + "ietf-keystore", + "ietf-truststore", + "ietf-system", + "ietf-netconf-server", + "ietf-alarms", + "ietf-network-instance", + "ietf-restconf", + "ietf-yang-schema-mount", + "ietf-subscribed-notifications", + "o-ran-uplane-conf", + "o-ran-performance-management", + "o-ran-transceiver", + "o-ran-mplane-int", + "o-ran-processing-element", + "o-ran-shared-cell", + "nts-network-function" + ], + + "default-list-instances": 2, + "custom-list-instances" : [ + {"/ietf-interfaces:interfaces/interface": 4} + + ], + + "restrict-schema": [ + {"/ietf-interfaces:interfaces/interface/type": ["iana-if-type:ethernetCsmacd"]} + ] + + }, + + "datastore-populate-rules": { + "random-generation-enabled": true, + + "pre-generated-operational-data": [ + "../deploy/data/ietf-hardware-operational.json", + "../deploy/data/ietf-interfaces-operational.xml" + ], + "pre-generated-running-data": [ + "../deploy/data/ietf-hardware-running.json", + "../deploy/data/ietf-interfaces-running.xml", + "/opt/dev/deploy/data/nts-network-function-running.xml" + ] + }, + + "fault-rules" : { + "yang-notif-template" : "%%fault-id%%%%object%%%%affected-object%%%%fault-severity%%%%cleared%%%%text%%%%date-time%%", + "choosing-method" : "linear", + "faults" : [ + { + "condition" : "Interface Fault", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "CRITICAL", + "date-time" : "$$time$$", + "specific-problem" : "Interface Fault", + + "fault-id": "30", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "false", + "text" : "Interface Fault" + }, + + { + "condition" : "Interface Fault", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "Interface Fault", + + "fault-id": "30", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "true", + "text" : "Interface Fault" + }, + + { + "condition" : "C/U-plane logical Connection faulty", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "CRITICAL", + "date-time" : "$$time$$", + "specific-problem" : "C/U-plane logical Connection faulty", + + "fault-id": "28", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "false", + "text" : "C/U-plane logical Connection faulty" + }, + + { + "condition" : "C/U-plane logical Connection faulty", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "C/U-plane logical Connection faulty", + + "fault-id": "28", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "true", + "text" : "C/U-plane logical Connection faulty" + } + ] + } +} \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-operational.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-operational.json new file mode 100644 index 0000000..18c83c9 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-operational.json @@ -0,0 +1,307 @@ +{ + "ietf-hardware:hardware": { + "component": [ + { + "name": "chassis", + "serial-num": "23412", + "software-rev": "3.8.1 (2029-10-30 11:47:59)", + "mfg-name": "NTS", + "model-name": "O1-O-RU-Simulator", + "description": "O-RAN O-RU O1 Simulator", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-temperature-exhaust", + "chassis-temperature-inlet", + "chassis-fan0", + "chassis-fan1", + "chassis-fan2", + "chassis-fan3", + "cpu", + "slot0", + "slot2" + ] + }, + { + "name": "chassis-temperature-exhaust", + "sensor-data": { + "value": 30, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-temperature-inlet", + "sensor-data": { + "value": 29, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan0", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan0-speed" + ] + }, + { + "name": "chassis-fan0-speed", + "sensor-data": { + "value": 4100, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan1", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan1-speed" + ] + }, + { + "name": "chassis-fan1-speed", + "sensor-data": { + "value": 4100, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan2", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan2-speed" + ] + }, + { + "name": "chassis-fan2-speed", + "sensor-data": { + "value": 4100, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan3", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan3-speed" + ] + }, + { + "name": "chassis-fan3-speed", + "sensor-data": { + "value": 1000, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "cpu", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "cpu-temperature" + ] + }, + { + "name": "cpu-temperature", + "sensor-data": { + "value": 30, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0", + "serial-num": "7220530", + "firmware-rev": "12.00.42-S (0F7F1001)", + "software-rev": "0", + "model-name": "385A-SFP-2P-40-FHL-JC3", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-temperature", + "slot0-logical0", + "slot0-logical1", + "slot0-logical2" + ] + }, + { + "name": "slot0-temperature", + "sensor-data": { + "value": 51, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0-logical0", + "description": "SLOT0-AZ", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-logical0-bbu", + "slot0-logical0-rrh" + ] + }, + { + "name": "slot0-logical0-bbu", + "serial-num": "AGNN214S", + "mfg-name": "ACME GMBH.", + "model-name": "ANSHEONXH-E7", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-logical0-bbu-temperature" + ] + }, + { + "name": "slot0-logical0-bbu-temperature", + "sensor-data": { + "value": 37, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0-logical0-rrh", + "serial-num": "AGNF714S", + "mfg-name": "ACME GMBH.", + "model-name": "ANSHEONXH-E7", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-logical0-rrh-temperature" + ] + }, + { + "name": "slot0-logical0-rrh-temperature", + "sensor-data": { + "value": 35, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0-logical1", + "description": "SLOT0-B", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot0-logical2", + "description": "SLOT0-C", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot2", + "serial-num": "2522642", + "firmware-rev": "12.00.42-S (0F7F1001)", + "software-rev": "0", + "model-name": "339B-SFP-2P-75-FHL-JC3", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot2-temperature", + "slot2-logical0", + "slot2-logical1", + "slot2-logical2" + ] + }, + { + "name": "slot2-temperature", + "sensor-data": { + "value": 49, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot2-logical0", + "description": "SLOT2-C", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot2-logical1", + "description": "SLOT3-A", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot2-logical2", + "description": "SLOT3-B", + "state": { + "oper-state": "disabled" + } + } + ] + } +} diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-running.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-running.json new file mode 100644 index 0000000..ab757fa --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-running.json @@ -0,0 +1,276 @@ +{ + "ietf-hardware:hardware": { + "component": [ + { + "name": "chassis", + "alias": "chassis", + "class": "iana-hardware:chassis", + "state": { + "admin-state": "unlocked" + } + }, + { + "name": "chassis-temperature-exhaust", + "alias": "chassis-temperature-exhaust", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 0 + }, + { + "name": "chassis-temperature-inlet", + "alias": "chassis-temperature-inlet", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 1 + }, + { + "name": "chassis-fan0", + "alias": "chassis-fan0", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 2 + }, + { + "name": "chassis-fan0-speed", + "alias": "chassis-fan0-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan0", + "parent-rel-pos": 0 + }, + { + "name": "chassis-fan1", + "alias": "chassis-fan1", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 3 + }, + { + "name": "chassis-fan1-speed", + "alias": "chassis-fan1-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan1", + "parent-rel-pos": 0 + }, + { + "name": "chassis-fan2", + "alias": "chassis-fan2", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 4 + }, + { + "name": "chassis-fan2-speed", + "alias": "chassis-fan2-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan2", + "parent-rel-pos": 0 + }, + { + "name": "chassis-fan3", + "alias": "chassis-fan3", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 5 + }, + { + "name": "chassis-fan3-speed", + "alias": "chassis-fan3-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan3", + "parent-rel-pos": 0 + }, + { + "name": "cpu", + "alias": "cpu", + "class": "iana-hardware:cpu", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 6 + }, + { + "name": "cpu-temperature", + "alias": "cpu-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "cpu", + "parent-rel-pos": 0 + }, + { + "name": "slot0", + "alias": "slot0", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "chassis", + "parent-rel-pos": 7 + }, + { + "name": "slot0-temperature", + "alias": "slot0-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot0", + "parent-rel-pos": 0 + }, + { + "name": "slot0-logical0", + "alias": "Slot0-A", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0", + "parent-rel-pos": 1 + }, + { + "name": "slot0-logical0-bbu", + "alias": "Slot0-A-bbu", + "class": "iana-hardware:port", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0-logical0", + "parent-rel-pos": 0, + "o-ran-hardware:o-ran-name": "slot0-logical0-bbu" + }, + { + "name": "slot0-logical0-bbu-temperature", + "alias": "Slot0-A-bbu-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot0-logical0-bbu", + "parent-rel-pos": 0 + }, + { + "name": "slot0-logical0-rrh", + "alias": "Slot0-A-rrh", + "class": "iana-hardware:port", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0-logical0", + "parent-rel-pos": 1, + "o-ran-hardware:o-ran-name": "slot0-logical0-rrh" + }, + { + "name": "slot0-logical0-rrh-temperature", + "alias": "Slot0-A-rrh-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot0-logical0-rrh", + "parent-rel-pos": 0 + }, + { + "name": "slot0-logical1", + "alias": "Slot0-B", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0", + "parent-rel-pos": 2 + }, + { + "name": "slot0-logical2", + "alias": "Slot0-C", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0", + "parent-rel-pos": 3 + }, + { + "name": "slot2", + "alias": "slot2", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "chassis", + "parent-rel-pos": 9 + }, + { + "name": "slot2-temperature", + "alias": "slot2-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot2", + "parent-rel-pos": 0 + }, + { + "name": "slot2-logical0", + "alias": "Slot2-C", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot2", + "parent-rel-pos": 1 + }, + { + "name": "slot2-logical1", + "alias": "Slot3-A", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot2", + "parent-rel-pos": 2 + }, + { + "name": "slot2-logical2", + "alias": "Slot3-B", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot2", + "parent-rel-pos": 3 + } + ] + } +} diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-operational.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-operational.xml new file mode 100644 index 0000000..75f0eec --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-operational.xml @@ -0,0 +1,151 @@ + + + 09a95e08-5b53-4734-815f-a9c12300fc62 + Simulated interface for O-RU + ianaift:ethernetCsmacd + true + disabled + + false + false + 42783 +
+ 6.122.172.49 + 14 + static +
+
+ 206.35.59.57 + 199.41.255.188 + random +
+ + 48.159.72.129 + 42:8f:12:23:03:d3 + other + + + 187.230.45.63 + 77:b5:38:45:08:be + dynamic + + 13 + + 38 + 16 + 62 + 27 + + X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD + 21 + + + 2zF55KBup + 5 + + +
+ + true + true + 1163652863 +
+ ea87:d264:da5e:5b19:4713:7266:f91e:14f7 + 124 + other + tentative +
+
+ 2853:6b9:c531:f3c1:6875:f55:17ea:157b + 65 + link-layer + preferred +
+ + e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e + 65:58:a4:47:f1:91 + other + + probe + + + f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f + 32:d7:a9:c1:37:14 + other + incomplete + + 1225514618 + + true + true + 2335597472 + 922813230 + + 33 + + 29 + 50 + 14 + 61 + + 8iROcw05EJqk0qe08RerP + 18 + + + M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO + 29 + + +
+ b2:24:6a:90:68:bb + ba:33:50:5b:58:f7 + 2c:2b:1f:8c:3f:a2 + + 113 + + 60489 + true + + 3 + 0 + 1 + 6 + 4 + + dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi + 5 + + + MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D + 2 + + + up + unknown + 2018-12-04T01:22:44Z + 1399123220 + fc:07:1e:ec:24:a3 + 80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk + 80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk + 2897952377425309696 + + 2037-04-15T16:07:29Z + 2571268368646403584 + 6267618126971935744 + 1109994561130658944 + 3315305959068576256 + 1267048002 + 2454029092 + 603209482 + 1059514199864528128 + 6657904184753078272 + 5105130509884859392 + 2014558074734005248 + 2053161590 + 1475901304 + + 1976-10-15T10:34:12Z + 56 + 143 +
+
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-running.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-running.xml new file mode 100644 index 0000000..3de642b --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-running.xml @@ -0,0 +1,111 @@ + + + 09a95e08-5b53-4734-815f-a9c12300fc62 + Simulated interface for O-RU + ianaift:ethernetCsmacd + true + disabled + + false + false + 42783 +
+ 6.122.172.49 + 14 +
+
+ 206.35.59.57 + 199.41.255.188 +
+ + 48.159.72.129 + 42:8f:12:23:03:d3 + + + 187.230.45.63 + 77:b5:38:45:08:be + + 13 + + 38 + 16 + 62 + 27 + + X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD + 21 + + + 2zF55KBup + 5 + + +
+ + true + true + 1163652863 +
+ ea87:d264:da5e:5b19:4713:7266:f91e:14f7 + 124 +
+
+ 2853:6b9:c531:f3c1:6875:f55:17ea:157b + 65 +
+ + e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e + 65:58:a4:47:f1:91 + + + f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f + 32:d7:a9:c1:37:14 + + 1225514618 + + true + true + 2335597472 + 922813230 + + 33 + + 29 + 50 + 14 + 61 + + 8iROcw05EJqk0qe08RerP + 18 + + + M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO + 29 + + +
+ b2:24:6a:90:68:bb + ba:33:50:5b:58:f7 + 2c:2b:1f:8c:3f:a2 + + 113 + + 60489 + true + + 3 + 0 + 1 + 6 + 4 + + dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi + 5 + + + MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D + 2 + + +
+
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/nts-network-function-running.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/nts-network-function-running.xml new file mode 100644 index 0000000..7e558f2 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/nts-network-function-running.xml @@ -0,0 +1,21 @@ + + + docker-mapping + + + 0 + 10 + + + + true + true + + + false + false + 120 + + NTS_FUNCTION_TYPE_O_RAN_O_RU_FH + + \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/config.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/config.json new file mode 100644 index 0000000..a4ba808 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/config.json @@ -0,0 +1,135 @@ +{ + "container-rules": { + "excluded-modules": [], + "excluded-features": [] + }, + + "supervisor-rules": { + "netopeer": { + "path": "/usr/local/bin/netopeer2-server", + "args": ["-d", "-v2"], + "autorestart": true, + "stdout": "log/netopeer-stdout.log", + "stderr": "log/netopeer-stderr.log" + }, + + "ntsim-network-function": { + "path": "/opt/dev/ntsim-ng/ntsim-ng", + "args": ["-w/opt/dev/ntsim-ng", "-f"], + "nomanual": true + } + }, + + "datastore-random-generation-rules" : { + "excluded-modules": [ + "sysrepo", + "sysrepo-monitoring", + "ietf-yang-library", + "ietf-netconf-acm", + "ietf-netconf-monitoring", + "nc-notifications", + "ietf-keystore", + "ietf-truststore", + "ietf-system", + "ietf-netconf-server", + "ietf-alarms", + "ietf-network-instance", + "ietf-restconf", + "ietf-yang-schema-mount", + "ietf-subscribed-notifications", + "o-ran-uplane-conf", + "o-ran-performance-management", + "o-ran-transceiver", + "o-ran-mplane-int", + "o-ran-processing-element", + "o-ran-shared-cell", + "nts-network-function" + ], + + "default-list-instances": 2, + "custom-list-instances" : [ + {"/ietf-interfaces:interfaces/interface": 4} + + ], + + "restrict-schema": [ + {"/ietf-interfaces:interfaces/interface/type": ["iana-if-type:ethernetCsmacd"]} + ] + + }, + + "datastore-populate-rules": { + "random-generation-enabled": true, + + "pre-generated-operational-data": [ + "../deploy/data/ietf-hardware-operational.json", + "../deploy/data/ietf-interfaces-operational.xml" + ], + "pre-generated-running-data": [ + "../deploy/data/ietf-hardware-running.json", + "../deploy/data/ietf-interfaces-running.xml" + ] + }, + + "fault-rules" : { + "yang-notif-template" : "%%fault-id%%%%object%%%%affected-object%%%%fault-severity%%%%cleared%%%%text%%%%date-time%%", + "choosing-method" : "linear", + "faults" : [ + { + "condition" : "Interface Fault", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "CRITICAL", + "date-time" : "$$time$$", + "specific-problem" : "Interface Fault", + + "fault-id": "30", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "false", + "text" : "Interface Fault" + }, + + { + "condition" : "Interface Fault", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "Interface Fault", + + "fault-id": "30", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "true", + "text" : "Interface Fault" + }, + + { + "condition" : "C/U-plane logical Connection faulty", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "CRITICAL", + "date-time" : "$$time$$", + "specific-problem" : "C/U-plane logical Connection faulty", + + "fault-id": "28", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "false", + "text" : "C/U-plane logical Connection faulty" + }, + + { + "condition" : "C/U-plane logical Connection faulty", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "C/U-plane logical Connection faulty", + + "fault-id": "28", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "true", + "text" : "C/U-plane logical Connection faulty" + } + ] + } +} \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-operational.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-operational.json new file mode 100644 index 0000000..18c83c9 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-operational.json @@ -0,0 +1,307 @@ +{ + "ietf-hardware:hardware": { + "component": [ + { + "name": "chassis", + "serial-num": "23412", + "software-rev": "3.8.1 (2029-10-30 11:47:59)", + "mfg-name": "NTS", + "model-name": "O1-O-RU-Simulator", + "description": "O-RAN O-RU O1 Simulator", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-temperature-exhaust", + "chassis-temperature-inlet", + "chassis-fan0", + "chassis-fan1", + "chassis-fan2", + "chassis-fan3", + "cpu", + "slot0", + "slot2" + ] + }, + { + "name": "chassis-temperature-exhaust", + "sensor-data": { + "value": 30, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-temperature-inlet", + "sensor-data": { + "value": 29, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan0", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan0-speed" + ] + }, + { + "name": "chassis-fan0-speed", + "sensor-data": { + "value": 4100, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan1", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan1-speed" + ] + }, + { + "name": "chassis-fan1-speed", + "sensor-data": { + "value": 4100, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan2", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan2-speed" + ] + }, + { + "name": "chassis-fan2-speed", + "sensor-data": { + "value": 4100, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan3", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan3-speed" + ] + }, + { + "name": "chassis-fan3-speed", + "sensor-data": { + "value": 1000, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "cpu", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "cpu-temperature" + ] + }, + { + "name": "cpu-temperature", + "sensor-data": { + "value": 30, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0", + "serial-num": "7220530", + "firmware-rev": "12.00.42-S (0F7F1001)", + "software-rev": "0", + "model-name": "385A-SFP-2P-40-FHL-JC3", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-temperature", + "slot0-logical0", + "slot0-logical1", + "slot0-logical2" + ] + }, + { + "name": "slot0-temperature", + "sensor-data": { + "value": 51, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0-logical0", + "description": "SLOT0-AZ", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-logical0-bbu", + "slot0-logical0-rrh" + ] + }, + { + "name": "slot0-logical0-bbu", + "serial-num": "AGNN214S", + "mfg-name": "ACME GMBH.", + "model-name": "ANSHEONXH-E7", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-logical0-bbu-temperature" + ] + }, + { + "name": "slot0-logical0-bbu-temperature", + "sensor-data": { + "value": 37, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0-logical0-rrh", + "serial-num": "AGNF714S", + "mfg-name": "ACME GMBH.", + "model-name": "ANSHEONXH-E7", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-logical0-rrh-temperature" + ] + }, + { + "name": "slot0-logical0-rrh-temperature", + "sensor-data": { + "value": 35, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0-logical1", + "description": "SLOT0-B", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot0-logical2", + "description": "SLOT0-C", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot2", + "serial-num": "2522642", + "firmware-rev": "12.00.42-S (0F7F1001)", + "software-rev": "0", + "model-name": "339B-SFP-2P-75-FHL-JC3", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot2-temperature", + "slot2-logical0", + "slot2-logical1", + "slot2-logical2" + ] + }, + { + "name": "slot2-temperature", + "sensor-data": { + "value": 49, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot2-logical0", + "description": "SLOT2-C", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot2-logical1", + "description": "SLOT3-A", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot2-logical2", + "description": "SLOT3-B", + "state": { + "oper-state": "disabled" + } + } + ] + } +} diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-running.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-running.json new file mode 100644 index 0000000..ab757fa --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-running.json @@ -0,0 +1,276 @@ +{ + "ietf-hardware:hardware": { + "component": [ + { + "name": "chassis", + "alias": "chassis", + "class": "iana-hardware:chassis", + "state": { + "admin-state": "unlocked" + } + }, + { + "name": "chassis-temperature-exhaust", + "alias": "chassis-temperature-exhaust", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 0 + }, + { + "name": "chassis-temperature-inlet", + "alias": "chassis-temperature-inlet", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 1 + }, + { + "name": "chassis-fan0", + "alias": "chassis-fan0", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 2 + }, + { + "name": "chassis-fan0-speed", + "alias": "chassis-fan0-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan0", + "parent-rel-pos": 0 + }, + { + "name": "chassis-fan1", + "alias": "chassis-fan1", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 3 + }, + { + "name": "chassis-fan1-speed", + "alias": "chassis-fan1-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan1", + "parent-rel-pos": 0 + }, + { + "name": "chassis-fan2", + "alias": "chassis-fan2", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 4 + }, + { + "name": "chassis-fan2-speed", + "alias": "chassis-fan2-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan2", + "parent-rel-pos": 0 + }, + { + "name": "chassis-fan3", + "alias": "chassis-fan3", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 5 + }, + { + "name": "chassis-fan3-speed", + "alias": "chassis-fan3-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan3", + "parent-rel-pos": 0 + }, + { + "name": "cpu", + "alias": "cpu", + "class": "iana-hardware:cpu", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 6 + }, + { + "name": "cpu-temperature", + "alias": "cpu-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "cpu", + "parent-rel-pos": 0 + }, + { + "name": "slot0", + "alias": "slot0", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "chassis", + "parent-rel-pos": 7 + }, + { + "name": "slot0-temperature", + "alias": "slot0-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot0", + "parent-rel-pos": 0 + }, + { + "name": "slot0-logical0", + "alias": "Slot0-A", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0", + "parent-rel-pos": 1 + }, + { + "name": "slot0-logical0-bbu", + "alias": "Slot0-A-bbu", + "class": "iana-hardware:port", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0-logical0", + "parent-rel-pos": 0, + "o-ran-hardware:o-ran-name": "slot0-logical0-bbu" + }, + { + "name": "slot0-logical0-bbu-temperature", + "alias": "Slot0-A-bbu-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot0-logical0-bbu", + "parent-rel-pos": 0 + }, + { + "name": "slot0-logical0-rrh", + "alias": "Slot0-A-rrh", + "class": "iana-hardware:port", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0-logical0", + "parent-rel-pos": 1, + "o-ran-hardware:o-ran-name": "slot0-logical0-rrh" + }, + { + "name": "slot0-logical0-rrh-temperature", + "alias": "Slot0-A-rrh-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot0-logical0-rrh", + "parent-rel-pos": 0 + }, + { + "name": "slot0-logical1", + "alias": "Slot0-B", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0", + "parent-rel-pos": 2 + }, + { + "name": "slot0-logical2", + "alias": "Slot0-C", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0", + "parent-rel-pos": 3 + }, + { + "name": "slot2", + "alias": "slot2", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "chassis", + "parent-rel-pos": 9 + }, + { + "name": "slot2-temperature", + "alias": "slot2-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot2", + "parent-rel-pos": 0 + }, + { + "name": "slot2-logical0", + "alias": "Slot2-C", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot2", + "parent-rel-pos": 1 + }, + { + "name": "slot2-logical1", + "alias": "Slot3-A", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot2", + "parent-rel-pos": 2 + }, + { + "name": "slot2-logical2", + "alias": "Slot3-B", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot2", + "parent-rel-pos": 3 + } + ] + } +} diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-operational.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-operational.xml new file mode 100644 index 0000000..11f4d8d --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-operational.xml @@ -0,0 +1,151 @@ + + + 0d242150-33a6-4e7c-9988-ae3b01e8a7ea + Simulated interface for O-RU + ianaift:ethernetCsmacd + true + disabled + + false + false + 42783 +
+ 6.122.172.49 + 14 + static +
+
+ 206.35.59.57 + 199.41.255.188 + random +
+ + 48.159.72.129 + 42:8f:12:23:03:d3 + other + + + 187.230.45.63 + 77:b5:38:45:08:be + dynamic + + 13 + + 38 + 16 + 62 + 27 + + X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD + 21 + + + 2zF55KBup + 5 + + +
+ + true + true + 1163652863 +
+ ea87:d264:da5e:5b19:4713:7266:f91e:14f7 + 124 + other + tentative +
+
+ 2853:6b9:c531:f3c1:6875:f55:17ea:157b + 65 + link-layer + preferred +
+ + e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e + 65:58:a4:47:f1:91 + other + + probe + + + f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f + 32:d7:a9:c1:37:14 + other + incomplete + + 1225514618 + + true + true + 2335597472 + 922813230 + + 33 + + 29 + 50 + 14 + 61 + + 8iROcw05EJqk0qe08RerP + 18 + + + M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO + 29 + + +
+ b2:24:6a:90:68:bb + ba:33:50:5b:58:f7 + 2c:2b:1f:8c:3f:a2 + + 113 + + 60489 + true + + 3 + 0 + 1 + 6 + 4 + + dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi + 5 + + + MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D + 2 + + + up + unknown + 2018-12-04T01:22:44Z + 1399123220 + fc:07:1e:ec:24:a3 + 80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk + 80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk + 2897952377425309696 + + 2037-04-15T16:07:29Z + 2571268368646403584 + 6267618126971935744 + 1109994561130658944 + 3315305959068576256 + 1267048002 + 2454029092 + 603209482 + 1059514199864528128 + 6657904184753078272 + 5105130509884859392 + 2014558074734005248 + 2053161590 + 1475901304 + + 1976-10-15T10:34:12Z + 56 + 143 +
+
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-running.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-running.xml new file mode 100644 index 0000000..cdf695e --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-running.xml @@ -0,0 +1,111 @@ + + + 0d242150-33a6-4e7c-9988-ae3b01e8a7ea + Simulated interface for O-RU + ianaift:ethernetCsmacd + true + disabled + + false + false + 42783 +
+ 6.122.172.49 + 14 +
+
+ 206.35.59.57 + 199.41.255.188 +
+ + 48.159.72.129 + 42:8f:12:23:03:d3 + + + 187.230.45.63 + 77:b5:38:45:08:be + + 13 + + 38 + 16 + 62 + 27 + + X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD + 21 + + + 2zF55KBup + 5 + + +
+ + true + true + 1163652863 +
+ ea87:d264:da5e:5b19:4713:7266:f91e:14f7 + 124 +
+
+ 2853:6b9:c531:f3c1:6875:f55:17ea:157b + 65 +
+ + e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e + 65:58:a4:47:f1:91 + + + f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f + 32:d7:a9:c1:37:14 + + 1225514618 + + true + true + 2335597472 + 922813230 + + 33 + + 29 + 50 + 14 + 61 + + 8iROcw05EJqk0qe08RerP + 18 + + + M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO + 29 + + +
+ b2:24:6a:90:68:bb + ba:33:50:5b:58:f7 + 2c:2b:1f:8c:3f:a2 + + 113 + + 60489 + true + + 3 + 0 + 1 + 6 + 4 + + dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi + 5 + + + MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D + 2 + + +
+
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/config.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/config.json new file mode 100644 index 0000000..a4ba808 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/config.json @@ -0,0 +1,135 @@ +{ + "container-rules": { + "excluded-modules": [], + "excluded-features": [] + }, + + "supervisor-rules": { + "netopeer": { + "path": "/usr/local/bin/netopeer2-server", + "args": ["-d", "-v2"], + "autorestart": true, + "stdout": "log/netopeer-stdout.log", + "stderr": "log/netopeer-stderr.log" + }, + + "ntsim-network-function": { + "path": "/opt/dev/ntsim-ng/ntsim-ng", + "args": ["-w/opt/dev/ntsim-ng", "-f"], + "nomanual": true + } + }, + + "datastore-random-generation-rules" : { + "excluded-modules": [ + "sysrepo", + "sysrepo-monitoring", + "ietf-yang-library", + "ietf-netconf-acm", + "ietf-netconf-monitoring", + "nc-notifications", + "ietf-keystore", + "ietf-truststore", + "ietf-system", + "ietf-netconf-server", + "ietf-alarms", + "ietf-network-instance", + "ietf-restconf", + "ietf-yang-schema-mount", + "ietf-subscribed-notifications", + "o-ran-uplane-conf", + "o-ran-performance-management", + "o-ran-transceiver", + "o-ran-mplane-int", + "o-ran-processing-element", + "o-ran-shared-cell", + "nts-network-function" + ], + + "default-list-instances": 2, + "custom-list-instances" : [ + {"/ietf-interfaces:interfaces/interface": 4} + + ], + + "restrict-schema": [ + {"/ietf-interfaces:interfaces/interface/type": ["iana-if-type:ethernetCsmacd"]} + ] + + }, + + "datastore-populate-rules": { + "random-generation-enabled": true, + + "pre-generated-operational-data": [ + "../deploy/data/ietf-hardware-operational.json", + "../deploy/data/ietf-interfaces-operational.xml" + ], + "pre-generated-running-data": [ + "../deploy/data/ietf-hardware-running.json", + "../deploy/data/ietf-interfaces-running.xml" + ] + }, + + "fault-rules" : { + "yang-notif-template" : "%%fault-id%%%%object%%%%affected-object%%%%fault-severity%%%%cleared%%%%text%%%%date-time%%", + "choosing-method" : "linear", + "faults" : [ + { + "condition" : "Interface Fault", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "CRITICAL", + "date-time" : "$$time$$", + "specific-problem" : "Interface Fault", + + "fault-id": "30", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "false", + "text" : "Interface Fault" + }, + + { + "condition" : "Interface Fault", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "Interface Fault", + + "fault-id": "30", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "true", + "text" : "Interface Fault" + }, + + { + "condition" : "C/U-plane logical Connection faulty", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "CRITICAL", + "date-time" : "$$time$$", + "specific-problem" : "C/U-plane logical Connection faulty", + + "fault-id": "28", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "false", + "text" : "C/U-plane logical Connection faulty" + }, + + { + "condition" : "C/U-plane logical Connection faulty", + "object" : "09a95e08-5b53-4734-815f-a9c12300fc62", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "C/U-plane logical Connection faulty", + + "fault-id": "28", + "fault-severity" : "CRITICAL", + "affected-object" : "$$hostname$$", + "cleared" : "true", + "text" : "C/U-plane logical Connection faulty" + } + ] + } +} \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-operational.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-operational.json new file mode 100644 index 0000000..18c83c9 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-operational.json @@ -0,0 +1,307 @@ +{ + "ietf-hardware:hardware": { + "component": [ + { + "name": "chassis", + "serial-num": "23412", + "software-rev": "3.8.1 (2029-10-30 11:47:59)", + "mfg-name": "NTS", + "model-name": "O1-O-RU-Simulator", + "description": "O-RAN O-RU O1 Simulator", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-temperature-exhaust", + "chassis-temperature-inlet", + "chassis-fan0", + "chassis-fan1", + "chassis-fan2", + "chassis-fan3", + "cpu", + "slot0", + "slot2" + ] + }, + { + "name": "chassis-temperature-exhaust", + "sensor-data": { + "value": 30, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-temperature-inlet", + "sensor-data": { + "value": 29, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan0", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan0-speed" + ] + }, + { + "name": "chassis-fan0-speed", + "sensor-data": { + "value": 4100, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan1", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan1-speed" + ] + }, + { + "name": "chassis-fan1-speed", + "sensor-data": { + "value": 4100, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan2", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan2-speed" + ] + }, + { + "name": "chassis-fan2-speed", + "sensor-data": { + "value": 4100, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "chassis-fan3", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "chassis-fan3-speed" + ] + }, + { + "name": "chassis-fan3-speed", + "sensor-data": { + "value": 1000, + "value-type": "rpm", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "cpu", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "cpu-temperature" + ] + }, + { + "name": "cpu-temperature", + "sensor-data": { + "value": 30, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0", + "serial-num": "7220530", + "firmware-rev": "12.00.42-S (0F7F1001)", + "software-rev": "0", + "model-name": "385A-SFP-2P-40-FHL-JC3", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-temperature", + "slot0-logical0", + "slot0-logical1", + "slot0-logical2" + ] + }, + { + "name": "slot0-temperature", + "sensor-data": { + "value": 51, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0-logical0", + "description": "SLOT0-AZ", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-logical0-bbu", + "slot0-logical0-rrh" + ] + }, + { + "name": "slot0-logical0-bbu", + "serial-num": "AGNN214S", + "mfg-name": "ACME GMBH.", + "model-name": "ANSHEONXH-E7", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-logical0-bbu-temperature" + ] + }, + { + "name": "slot0-logical0-bbu-temperature", + "sensor-data": { + "value": 37, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0-logical0-rrh", + "serial-num": "AGNF714S", + "mfg-name": "ACME GMBH.", + "model-name": "ANSHEONXH-E7", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot0-logical0-rrh-temperature" + ] + }, + { + "name": "slot0-logical0-rrh-temperature", + "sensor-data": { + "value": 35, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot0-logical1", + "description": "SLOT0-B", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot0-logical2", + "description": "SLOT0-C", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot2", + "serial-num": "2522642", + "firmware-rev": "12.00.42-S (0F7F1001)", + "software-rev": "0", + "model-name": "339B-SFP-2P-75-FHL-JC3", + "state": { + "oper-state": "enabled" + }, + "contains-child": [ + "slot2-temperature", + "slot2-logical0", + "slot2-logical1", + "slot2-logical2" + ] + }, + { + "name": "slot2-temperature", + "sensor-data": { + "value": 49, + "value-type": "celsius", + "value-timestamp": "2021-03-18T19:51:50.3Z", + "oper-status": "ok" + }, + "state": { + "oper-state": "enabled" + } + }, + { + "name": "slot2-logical0", + "description": "SLOT2-C", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot2-logical1", + "description": "SLOT3-A", + "state": { + "oper-state": "disabled" + } + }, + { + "name": "slot2-logical2", + "description": "SLOT3-B", + "state": { + "oper-state": "disabled" + } + } + ] + } +} diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-running.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-running.json new file mode 100644 index 0000000..ab757fa --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-running.json @@ -0,0 +1,276 @@ +{ + "ietf-hardware:hardware": { + "component": [ + { + "name": "chassis", + "alias": "chassis", + "class": "iana-hardware:chassis", + "state": { + "admin-state": "unlocked" + } + }, + { + "name": "chassis-temperature-exhaust", + "alias": "chassis-temperature-exhaust", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 0 + }, + { + "name": "chassis-temperature-inlet", + "alias": "chassis-temperature-inlet", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 1 + }, + { + "name": "chassis-fan0", + "alias": "chassis-fan0", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 2 + }, + { + "name": "chassis-fan0-speed", + "alias": "chassis-fan0-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan0", + "parent-rel-pos": 0 + }, + { + "name": "chassis-fan1", + "alias": "chassis-fan1", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 3 + }, + { + "name": "chassis-fan1-speed", + "alias": "chassis-fan1-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan1", + "parent-rel-pos": 0 + }, + { + "name": "chassis-fan2", + "alias": "chassis-fan2", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 4 + }, + { + "name": "chassis-fan2-speed", + "alias": "chassis-fan2-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan2", + "parent-rel-pos": 0 + }, + { + "name": "chassis-fan3", + "alias": "chassis-fan3", + "class": "iana-hardware:fan", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 5 + }, + { + "name": "chassis-fan3-speed", + "alias": "chassis-fan3-speed", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "chassis-fan3", + "parent-rel-pos": 0 + }, + { + "name": "cpu", + "alias": "cpu", + "class": "iana-hardware:cpu", + "state": { + "admin-state": "locked" + }, + "parent": "chassis", + "parent-rel-pos": 6 + }, + { + "name": "cpu-temperature", + "alias": "cpu-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "cpu", + "parent-rel-pos": 0 + }, + { + "name": "slot0", + "alias": "slot0", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "chassis", + "parent-rel-pos": 7 + }, + { + "name": "slot0-temperature", + "alias": "slot0-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot0", + "parent-rel-pos": 0 + }, + { + "name": "slot0-logical0", + "alias": "Slot0-A", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0", + "parent-rel-pos": 1 + }, + { + "name": "slot0-logical0-bbu", + "alias": "Slot0-A-bbu", + "class": "iana-hardware:port", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0-logical0", + "parent-rel-pos": 0, + "o-ran-hardware:o-ran-name": "slot0-logical0-bbu" + }, + { + "name": "slot0-logical0-bbu-temperature", + "alias": "Slot0-A-bbu-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot0-logical0-bbu", + "parent-rel-pos": 0 + }, + { + "name": "slot0-logical0-rrh", + "alias": "Slot0-A-rrh", + "class": "iana-hardware:port", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0-logical0", + "parent-rel-pos": 1, + "o-ran-hardware:o-ran-name": "slot0-logical0-rrh" + }, + { + "name": "slot0-logical0-rrh-temperature", + "alias": "Slot0-A-rrh-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot0-logical0-rrh", + "parent-rel-pos": 0 + }, + { + "name": "slot0-logical1", + "alias": "Slot0-B", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0", + "parent-rel-pos": 2 + }, + { + "name": "slot0-logical2", + "alias": "Slot0-C", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot0", + "parent-rel-pos": 3 + }, + { + "name": "slot2", + "alias": "slot2", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "chassis", + "parent-rel-pos": 9 + }, + { + "name": "slot2-temperature", + "alias": "slot2-temperature", + "class": "iana-hardware:sensor", + "state": { + "admin-state": "locked" + }, + "parent": "slot2", + "parent-rel-pos": 0 + }, + { + "name": "slot2-logical0", + "alias": "Slot2-C", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot2", + "parent-rel-pos": 1 + }, + { + "name": "slot2-logical1", + "alias": "Slot3-A", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot2", + "parent-rel-pos": 2 + }, + { + "name": "slot2-logical2", + "alias": "Slot3-B", + "class": "iana-hardware:module", + "state": { + "admin-state": "unlocked" + }, + "parent": "slot2", + "parent-rel-pos": 3 + } + ] + } +} diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-operational.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-operational.xml new file mode 100644 index 0000000..c6d3038 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-operational.xml @@ -0,0 +1,151 @@ + + + d3ea2f17-a841-4e71-9ef9-9549159aabe7 + Simulated interface for O-RU + ianaift:ethernetCsmacd + true + disabled + + false + false + 42783 +
+ 6.122.172.49 + 14 + static +
+
+ 206.35.59.57 + 199.41.255.188 + random +
+ + 48.159.72.129 + 42:8f:12:23:03:d3 + other + + + 187.230.45.63 + 77:b5:38:45:08:be + dynamic + + 13 + + 38 + 16 + 62 + 27 + + X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD + 21 + + + 2zF55KBup + 5 + + +
+ + true + true + 1163652863 +
+ ea87:d264:da5e:5b19:4713:7266:f91e:14f7 + 124 + other + tentative +
+
+ 2853:6b9:c531:f3c1:6875:f55:17ea:157b + 65 + link-layer + preferred +
+ + e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e + 65:58:a4:47:f1:91 + other + + probe + + + f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f + 32:d7:a9:c1:37:14 + other + incomplete + + 1225514618 + + true + true + 2335597472 + 922813230 + + 33 + + 29 + 50 + 14 + 61 + + 8iROcw05EJqk0qe08RerP + 18 + + + M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO + 29 + + +
+ b2:24:6a:90:68:bb + ba:33:50:5b:58:f7 + 2c:2b:1f:8c:3f:a2 + + 113 + + 60489 + true + + 3 + 0 + 1 + 6 + 4 + + dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi + 5 + + + MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D + 2 + + + up + unknown + 2018-12-04T01:22:44Z + 1399123220 + fc:07:1e:ec:24:a3 + 80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk + 80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk + 2897952377425309696 + + 2037-04-15T16:07:29Z + 2571268368646403584 + 6267618126971935744 + 1109994561130658944 + 3315305959068576256 + 1267048002 + 2454029092 + 603209482 + 1059514199864528128 + 6657904184753078272 + 5105130509884859392 + 2014558074734005248 + 2053161590 + 1475901304 + + 1976-10-15T10:34:12Z + 56 + 143 +
+
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-running.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-running.xml new file mode 100644 index 0000000..19d5f98 --- /dev/null +++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-running.xml @@ -0,0 +1,111 @@ + + + d3ea2f17-a841-4e71-9ef9-9549159aabe7 + Simulated interface for O-RU + ianaift:ethernetCsmacd + true + disabled + + false + false + 42783 +
+ 6.122.172.49 + 14 +
+
+ 206.35.59.57 + 199.41.255.188 +
+ + 48.159.72.129 + 42:8f:12:23:03:d3 + + + 187.230.45.63 + 77:b5:38:45:08:be + + 13 + + 38 + 16 + 62 + 27 + + X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD + 21 + + + 2zF55KBup + 5 + + +
+ + true + true + 1163652863 +
+ ea87:d264:da5e:5b19:4713:7266:f91e:14f7 + 124 +
+
+ 2853:6b9:c531:f3c1:6875:f55:17ea:157b + 65 +
+ + e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e + 65:58:a4:47:f1:91 + + + f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f + 32:d7:a9:c1:37:14 + + 1225514618 + + true + true + 2335597472 + 922813230 + + 33 + + 29 + 50 + 14 + 61 + + 8iROcw05EJqk0qe08RerP + 18 + + + M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO + 29 + + +
+ b2:24:6a:90:68:bb + ba:33:50:5b:58:f7 + 2c:2b:1f:8c:3f:a2 + + 113 + + 60489 + true + + 3 + 0 + 1 + 6 + 4 + + dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi + 5 + + + MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D + 2 + + +
+
diff --git a/solution/integration/network/ntsim-ng-topology-server/config.json b/solution/integration/network/ntsim-ng-topology-server/config.json new file mode 100644 index 0000000..1aaef9c --- /dev/null +++ b/solution/integration/network/ntsim-ng-topology-server/config.json @@ -0,0 +1,136 @@ +{ + "container-rules": { + "excluded-modules": [], + "excluded-features": [] + }, + + "supervisor-rules": { + "netopeer": { + "path": "/usr/local/bin/netopeer2-server", + "args": ["-d", "-v2"], + "autorestart": true, + "stdout": "log/netopeer-stdout.log", + "stderr": "log/netopeer-stderr.log" + }, + + "ntsim-network-function": { + "path": "/opt/dev/ntsim-ng/ntsim-ng", + "args": ["-w/opt/dev/ntsim-ng", "-f"], + "nomanual": true + } + }, + + "datastore-random-generation-rules" : { + "excluded-modules": [ + "sysrepo", + "sysrepo-monitoring", + "ietf-yang-library", + "ietf-netconf-acm", + "ietf-netconf-monitoring", + "nc-notifications", + "ietf-keystore", + "ietf-truststore", + "ietf-system", + "ietf-netconf-server", + "nts-network-function" + ], + + "default-list-instances": 2, + "custom-list-instances" : [] + }, + + "datastore-populate-rules": { + "random-generation-enabled": false, + + "pre-generated-operational-data": [ + "/opt/dev/deploy/data/tapi-common-operational.xml" + ], + "pre-generated-running-data": [ + "/opt/dev/deploy/data/tapi-common-running.xml" + ] + }, + + "fault-rules" : { + "yang-notif-template" : "$$uint16_counter$$%%object%%%%affected-object%%%%fault-severity%%%%cleared%%%%text%%%%date-time%%", + "choosing-method" : "linear", + "faults" : [ + { + "condition" : "CPRI Port Down", + "object" : "Slot-0-Port-A", + "severity" : "MAJOR", + "date-time" : "$$time$$", + "specific-problem" : "CPRI Port Down", + + "fault-severity" : "MAJOR", + "affected-object" : "%%object%%", + "cleared" : "false", + "text" : "CPRI Port Down" + }, + + { + "condition" : "CPRI Port Down", + "object" : "Slot-0-Port-A", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "CPRI Port Down", + + "fault-severity" : "MAJOR", + "affected-object" : "%%object%%", + "cleared" : "true", + "text" : "CPRI Port Down" + }, + + { + "condition" : "CPRI Port Down", + "object" : "Slot-0-Port-C", + "severity" : "MAJOR", + "date-time" : "$$time$$", + "specific-problem" : "CPRI Port Down", + + "fault-severity" : "MAJOR", + "affected-object" : "%%object%%", + "cleared" : "false", + "text" : "CPRI Port Down" + }, + + { + "condition" : "CPRI Port Down", + "object" : "Slot-0-Port-C", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "CPRI Port Down", + + "fault-severity" : "MAJOR", + "affected-object" : "%%object%%", + "cleared" : "true", + "text" : "CPRI Port Down" + }, + + { + "condition" : "CPRI Port Down", + "object" : "Slot-2-Port-B", + "severity" : "MAJOR", + "date-time" : "$$time$$", + "specific-problem" : "CPRI Port Down", + + "fault-severity" : "MAJOR", + "affected-object" : "%%object%%", + "cleared" : "false", + "text" : "CPRI Port Down" + }, + + { + "condition" : "CPRI Port Down", + "object" : "Slot-2-Port-B", + "severity" : "NORMAL", + "date-time" : "$$time$$", + "specific-problem" : "CPRI Port Down", + + "fault-severity" : "MAJOR", + "affected-object" : "%%object%%", + "cleared" : "true", + "text" : "CPRI Port Down" + } + ] + } +} \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-topology-server/tapi-common-operational.xml b/solution/integration/network/ntsim-ng-topology-server/tapi-common-operational.xml new file mode 100644 index 0000000..861c09b --- /dev/null +++ b/solution/integration/network/ntsim-ng-topology-server/tapi-common-operational.xml @@ -0,0 +1,316 @@ + + 6f69da3a-a243-4058-974e-baf11c357b7a + + test + context + + + + 7adfee73-44be-4813-a0dc-89f657f0a436 + + ac089635-7a85-4197-9310-9b14f476a4a9 + + 539f24cb-a5e9-454f-b05d-6307be419afe + ETH + tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE + BIDIRECTIONAL + SYMMETRIC + + interface-name + O-DU-interface-1 + + LOCKED + ENABLED + INSTALLED + + + ETH + + device-name + highstreet-O-DU-1122 + + LOCKED + ENABLED + INSTALLED + + cost + value-1 + alg1 + + + property-1 + latency-1 + queue-1 + jitter-1 + wander-1 + + + + 6b0d3930-100b-466c-9f44-2748ffb6aaa1 + + bb7e5882-6e3a-46a7-a95b-0bb7310ede22 + ETH + tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE + BIDIRECTIONAL + SYMMETRIC + + interface-name + 09a95e08-5b53-4734-815f-a9c12300fc62 + + + interface-description + Simulated interface for O-RU + + LOCKED + ENABLED + INSTALLED + + + ETH + + device-name + highstreet-O-RU-11221 + + LOCKED + ENABLED + INSTALLED + + cost + value-1 + alg1 + + + property-1 + latency-1 + queue-1 + jitter-1 + wander-1 + + + + 69a8fdf0-2bdd-44a2-9bc4-8813640fa02c + + 124488fc-05d0-421b-8a16-4eaf86cbc89b + ETH + tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE + BIDIRECTIONAL + SYMMETRIC + + interface-name + 0d242150-33a6-4e7c-9988-ae3b01e8a7ea + + + interface-description + Simulated interface for O-RU + + LOCKED + ENABLED + INSTALLED + + + ETH + + device-name + highstreet-O-RU-11222 + + LOCKED + ENABLED + INSTALLED + + cost + value-1 + alg1 + + + property-1 + latency-1 + queue-1 + jitter-1 + wander-1 + + + + c8499a83-211e-4cef-be30-a1cc2208bbb6 + + 5f01a4c2-9067-4b05-a1a5-7d8998f4f11f + ETH + tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE + BIDIRECTIONAL + SYMMETRIC + + interface-name + d3ea2f17-a841-4e71-9ef9-9549159aabe7 + + + interface-description + Simulated interface for O-RU + + LOCKED + ENABLED + INSTALLED + + + ETH + + device-name + highstreet-O-RU-11223 + + LOCKED + ENABLED + INSTALLED + + cost + value-1 + alg1 + + + property-1 + latency-1 + queue-1 + jitter-1 + wander-1 + + + + ac78b69f-22df-46fd-ae76-cc989bc30abc + + 7adfee73-44be-4813-a0dc-89f657f0a436 + ac089635-7a85-4197-9310-9b14f476a4a9 + 539f24cb-a5e9-454f-b05d-6307be419afe + + + 7adfee73-44be-4813-a0dc-89f657f0a436 + 6b0d3930-100b-466c-9f44-2748ffb6aaa1 + bb7e5882-6e3a-46a7-a95b-0bb7310ede22 + + ETH + BIDIRECTIONAL + + link-name + highstreet-O-DU-1122-to-highstreet-O-RU-11221 + + LOCKED + ENABLED + INSTALLED + + cost + value-1 + alg1 + + + property-1 + latency-1 + queue-1 + jitter-1 + wander-1 + + + risk-name + risk-1 + + + mechanism-1 + validated + very-robust + + layer-protocol-1---should-it-be-an-uuid? + layer-protocol-2---should-it-be-an-uuid? + + + ac78b69f-22df-46fd-ae76-cc989bc30ae9 + + 7adfee73-44be-4813-a0dc-89f657f0a436 + ac089635-7a85-4197-9310-9b14f476a4a9 + 539f24cb-a5e9-454f-b05d-6307be419afe + + + 7adfee73-44be-4813-a0dc-89f657f0a436 + 69a8fdf0-2bdd-44a2-9bc4-8813640fa02c + 124488fc-05d0-421b-8a16-4eaf86cbc89b + + ETH + BIDIRECTIONAL + + link-name + highstreet-O-DU-1122-to-highstreet-O-RU-11222 + + LOCKED + ENABLED + INSTALLED + + cost + value-1 + alg1 + + + property-1 + latency-1 + queue-1 + jitter-1 + wander-1 + + + risk-name + risk-1 + + + mechanism-1 + validated + very-robust + + layer-protocol-1---should-it-be-an-uuid? + layer-protocol-2---should-it-be-an-uuid? + + + bc98b69f-22df-46fd-ae76-cc989bc30ae9 + + 7adfee73-44be-4813-a0dc-89f657f0a436 + ac089635-7a85-4197-9310-9b14f476a4a9 + 539f24cb-a5e9-454f-b05d-6307be419afe + + + 7adfee73-44be-4813-a0dc-89f657f0a436 + c8499a83-211e-4cef-be30-a1cc2208bbb6 + 5f01a4c2-9067-4b05-a1a5-7d8998f4f11f + + ETH + BIDIRECTIONAL + + link-name + highstreet-O-DU-1122-to-highstreet-O-RU-11223 + + LOCKED + ENABLED + INSTALLED + + cost + value-1 + alg1 + + + property-1 + latency-1 + queue-1 + jitter-1 + wander-1 + + + risk-name + risk-1 + + + mechanism-1 + validated + very-robust + + layer-protocol-1---should-it-be-an-uuid? + layer-protocol-2---should-it-be-an-uuid? + + ETH + + test + topology + + + + \ No newline at end of file diff --git a/solution/integration/network/ntsim-ng-topology-server/tapi-common-running.xml b/solution/integration/network/ntsim-ng-topology-server/tapi-common-running.xml new file mode 100644 index 0000000..323926b --- /dev/null +++ b/solution/integration/network/ntsim-ng-topology-server/tapi-common-running.xml @@ -0,0 +1,7 @@ + + 6f69da3a-a243-4058-974e-baf11c357b7a + + test + context + + \ No newline at end of file diff --git a/solution/integration/smo/.env b/solution/integration/smo/.env deleted file mode 100644 index 283cc7f..0000000 --- a/solution/integration/smo/.env +++ /dev/null @@ -1,61 +0,0 @@ -################################################################################ -# Copyright 2021 highstreet technologies and others -# -# 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 -# -# https://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. -# - -COMPOSE_PROJECT_NAME=smo - -# Network settings -NETWORK_NAME=integration - -IPv4_NETWORK_SUBNET=172.40.0.0/16 -IPv4_GATEWAY=172.40.0.1 - -# Please update /etc/docker/daemon.json accordingly -# https://docs.docker.com/config/daemon/ipv6/ -IPv6_NETWORK_SUBNET=2001:db8:1:1::/64 -IPv6_GATEWAY=2001:db8:1:1::1 - -# SDN-R Database -SDNRDB_IMAGE=docker.elastic.co/elasticsearch/elasticsearch-oss:7.9.3 -IPv4_SDNRDB=172.40.0.30 -IPv6_SDNRDB=2001:db8:1:1::30 - -# SDN Controller -SDNC_IMAGE=nexus3.onap.org:10001/onap/sdnc-image:2.1.3 -IPv4_SDNC=172.40.0.21 -IPv6_SDNC=2001:db8:1:1::21 -ODL_CERT_DIR=/opt/opendaylight/current/certs -ODL_ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U - -# dependent components -## ZooKeeper -ZOOKEEPER_IMAGE=nexus3.onap.org:10001/onap/dmaap/zookeeper:6.0.3 -IPv4_ZOOKEEPER=172.40.0.60 -IPv6_ZOOKEEPER=2001:db8:1:1::60 - -## Kafka -KAFKA_IMAGE=nexus3.onap.org:10001/onap/dmaap/kafka111:1.0.4 -IPv4_KAFKA=172.40.0.70 -IPv6_KAFKA=2001:db8:1:1::70 - -## DMaaP -DMAAP_IMAGE=nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18 -IPv4_DMAAP=172.40.0.80 -IPv6_DMAAP=2001:db8:1:1::80 - -## VES Collector -VESCOLLECTOR_IMAGE=nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.8.0 -IPv4_VESCOLLECTOR=172.40.0.90 -IPv6_VESCOLLECTOR=2001:db8:1:1::90 diff --git a/solution/integration/smo/README.md b/solution/integration/smo/README.md deleted file mode 100644 index b333033..0000000 --- a/solution/integration/smo/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# Service Management and Orchestration (SMO) - -With respect to OAM the SMO implements the O1-interface provider. According to the O-RAN OAM Architecture and the O-RAN OAM Interface Specification, the SMO has a NetConf Client for configuration and HTTP/REST/VES Server for receiving all kind of events in a VES format. - -The setup contains an OpenDaylight based NetConf client and a VES Test Collector. - -## Overview - -This docker-compose file starts a pre-configured, self-contained SDN-R solution for developer test or demo purposes - - * **SDN-R** single node instance - - ... representing the NetConf consumer on the Service Management and Orchstration framework (SMO) for the O1 interface. - based on ODL-Sodium/ONAP-Guilin - - * **VES collector** - - ... representing the VES (REST) provider at SMO for all kind of events. - - * **DMaaP** - ... representing SMO DMaaP component, includes message-router - -## Prerequisites - -docker-compose file version 2.2 is used and tested with - - * Ubuntu 18.04 LTS - * Docker version 19.03.x - * docker-compose version 1.24.x - * git version 2.17.1 - * docker-compose for the solution - * enable git private docker registry, if used - -``` -cat /etc/os-release -docker --version -docker-compose --version -git --version -cd ~ -git clone https://gerrit.o-ran-sc.org:29418/oam.git -cd ~/oam/solution/integration/smo -``` - -## Usage - -### Bring Up Solution - - * Check (adjust if required) environment variables - -``` -cd ~/oam/solution/integration/smo -nano .env -``` - - * startup solution - -``` -cd ~/oam/solution/integration/smo -docker-compose up -d -``` - -### Log files and karaf console - - * ODL karaf.logs -``` -docker exec -it sdnr tail -f /opt/opendaylight/data/log/karaf.log -``` - - * karaf console access (karaf:karaf) - -``` -ssh karaf@localhost -p 8101 -``` - - * vescollector logs - -``` - docker logs -f vescollector -``` - -### Customizing Solution - -'.env' file contains customizing parameters - - -### Verification Solution - -#### Access to SDN-R UX - - * login into SDN-R - http://:8181/odlux/index.html - User:admin - Password:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U - - -### Terminate solution - -To stop all container: - -``` -cd ~/oam/solution/integration/smo -docker-compose down -``` - -re-start solution at any point in time with -``` -cd ~/oam/solution/integration/smo -docker-compose up -d -``` - - -### Cleanup - -!!! be careful if other stopped containers are on the same system -``` -docker system prune -a -f - - -``` -### Troubleshooting - diff --git a/solution/integration/smo/common/.env b/solution/integration/smo/common/.env new file mode 100644 index 0000000..6f4e5c8 --- /dev/null +++ b/solution/integration/smo/common/.env @@ -0,0 +1,49 @@ +################################################################################ +# Copyright 2021 highstreet technologies and others +# +# 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. +# + +COMPOSE_PROJECT_NAME=o-ran-sc-d-release + +# Credentials + +ADMIN_USERNAME=admin +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 + +# Identity server +IDENTITY_IMAGE=quay.io/keycloak/keycloak:12.0.4 +IDENTITY_PORT=8081 +IDENTITY_PROVIDER_URL=http://identity:8081 + +# Topology server +TOPOLOGY_IMAGE=docker.io/hightec/smo-topology-api-v2:2.0.2-SNAPSHOT-20210315T160448Z +TOPOLOGY_PROVIDERS=5GBerlin,winlab + +# PERSISTENCE (including SDN-R Database) +PERSISTENCE_IMAGE=docker.elastic.co/elasticsearch/elasticsearch-oss:7.9.3 + +## ZooKeeper +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 + +## DMaaP +DMAAP_IMAGE=nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18 \ No newline at end of file diff --git a/solution/integration/smo/dmaap/MsgRtrApi.properties b/solution/integration/smo/common/dmaap/MsgRtrApi.properties similarity index 97% rename from solution/integration/smo/dmaap/MsgRtrApi.properties rename to solution/integration/smo/common/dmaap/MsgRtrApi.properties index 6f88c85..33ff0fd 100644 --- a/solution/integration/smo/dmaap/MsgRtrApi.properties +++ b/solution/integration/smo/common/dmaap/MsgRtrApi.properties @@ -2,12 +2,12 @@ # ============LICENSE_START======================================================= # org.onap.dmaap # ================================================================================ -# Copyright 2017 AT&T Intellectual Property. All rights reserved. +# Copyright � 2017 AT&T Intellectual Property. All rights reserved. # ================================================================================ # 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 -# https://www.apache.org/licenses/LICENSE-2.0 +# 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, diff --git a/solution/integration/smo/dmaap/cadi.properties b/solution/integration/smo/common/dmaap/cadi.properties similarity index 100% rename from solution/integration/smo/dmaap/cadi.properties rename to solution/integration/smo/common/dmaap/cadi.properties diff --git a/solution/integration/smo/dmaap/logback.xml b/solution/integration/smo/common/dmaap/logback.xml similarity index 99% rename from solution/integration/smo/dmaap/logback.xml rename to solution/integration/smo/common/dmaap/logback.xml index 1256bcf..f02a2db 100644 --- a/solution/integration/smo/dmaap/logback.xml +++ b/solution/integration/smo/common/dmaap/logback.xml @@ -5,7 +5,7 @@ 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 - https://www.apache.org/licenses/LICENSE-2.0 + 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, diff --git a/solution/integration/smo/docker-compose.yml b/solution/integration/smo/common/docker-compose.yml similarity index 56% rename from solution/integration/smo/docker-compose.yml rename to solution/integration/smo/common/docker-compose.yml index 977f91e..e3088fd 100755 --- a/solution/integration/smo/docker-compose.yml +++ b/solution/integration/smo/common/docker-compose.yml @@ -1,11 +1,11 @@ ################################################################################ -# Copyright 2021 highstreet technologies and others +# Copyright 2021 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 # -# https://www.apache.org/licenses/LICENSE-2.0 +# 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, @@ -13,56 +13,43 @@ # See the License for the specific language governing permissions and # limitations under the License. # -version: "2.2" +version: '3.8' services: - sdnrdb: - image: ${SDNRDB_IMAGE} - container_name: sdnrdb - environment: - - discovery.type=single-node + identity: + image: ${IDENTITY_IMAGE} + container_name: identity + ports: + - ${IDENTITY_PORT}:${IDENTITY_PORT} + environment: + - KEYCLOAK_USER=${ADMIN_USERNAME} + - KEYCLOAK_PASSWORD=${ADMIN_PASSWORD} + - JAVA_OPTS=-Djboss.http.port=${IDENTITY_PORT} networks: - integration: - ipv4_address: ${IPv4_SDNRDB} - ipv6_address: ${IPv6_SDNRDB} - - sdnr: - image: ${SDNC_IMAGE} - container_name: sdnr + dmz: + + topology: + image: ${TOPOLOGY_IMAGE} + container_name: topology ports: - - "8181:8181" - - "8101:8101" + - 3001:3001 environment: - - SDNC_CONFIG_DIR=/opt/onap/ccsdk/data/properties - - ODL_CERT_DIR=${ODL_CERT_DIR} - - ENABLE_ODL_CLUSTER=false - - SDNC_REPLICAS=0 - - CCSDK_REPLICAS=0 - - DOMAIN="" - - SDNRWT=true - - SDNRINIT=true - - SDNRONLY=true - - SDNRDBURL=http://sdnrdb:9200 - - A1_ADAPTER_NORTHBOUND=false - - ODL_ADMIN_PASSWORD=${ODL_ADMIN_PASSWORD} - - JAVA_OPTS=-Xms256m -Xmx2g - volumes: - - ./sdnr/mountpoint-registrar.properties:/opt/opendaylight/etc/mountpoint-registrar.properties - - ./sdnr/certs/certs.properties:${ODL_CERT_DIR}/certs.properties - - ./sdnr/certs/keys0.zip:${ODL_CERT_DIR}/keys0.zip - networks: - integration: - ipv4_address: ${IPv4_SDNC} - ipv6_address: ${IPv6_SDNC} - logging: - driver: "json-file" - options: - max-size: "30m" - max-file: "5" + - AUTH_ENABLED=true + - AUTH_HOST_URL=${IDENTITY_PROVIDER_URL} + # - AUTH_CONFIG_FILE + - PROVIDERS=${TOPOLOGY_PROVIDERS} + - LOAD_PACKAGES=com.highstreet + + persistence: + image: ${PERSISTENCE_IMAGE} + container_name: persistence + environment: + - discovery.type=single-node + zookeeper: image: ${ZOOKEEPER_IMAGE} container_name: zookeeper ports: - - "2181:2181" + - 2181:2181 environment: ZOOKEEPER_REPLICAS: 1 ZOOKEEPER_TICK_TIME: 2000 @@ -75,18 +62,13 @@ services: KAFKA_OPTS: -Djava.security.auth.login.config=/etc/zookeeper/secrets/jaas/zk_server_jaas.conf -Dzookeeper.kerberos.removeHostFromPrincipal=true -Dzookeeper.kerberos.removeRealmFromPrincipal=true -Dzookeeper.authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider -Dzookeeper.requireClientAuthScheme=sasl ZOOKEEPER_SERVER_ID: volumes: - - ./zk/zk_server_jaas.conf:/etc/zookeeper/secrets/jaas/zk_server_jaas.conf - networks: - integration: - aliases: - - zookeeper - ipv4_address: ${IPv4_ZOOKEEPER} - ipv6_address: ${IPv6_ZOOKEEPER} + - ./zookeeper/zk_server_jaas.conf:/etc/zookeeper/secrets/jaas/zk_server_jaas.conf + kafka: image: ${KAFKA_IMAGE} container_name: kafka ports: - - "9092:9092" + - 9092:9092 environment: enableCadi: 'false' KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 @@ -104,58 +86,36 @@ services: KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: 1 volumes: - ./kafka/zk_client_jaas.conf:/etc/kafka/secrets/jaas/zk_client_jaas.conf - networks: - integration: - aliases: - - kafka - ipv4_address: ${IPv4_KAFKA} - ipv6_address: ${IPv6_KAFKA} depends_on: - zookeeper + dmaap: container_name: onap-dmaap image: ${DMAAP_IMAGE} ports: - - "3904:3904" - - "3905:3905" + - 3904:3904 + - 3905:3905 environment: enableCadi: 'false' volumes: - ./dmaap/MsgRtrApi.properties:/appl/dmaapMR1/bundleconfig/etc/appprops/MsgRtrApi.properties - ./dmaap/logback.xml:/appl/dmaapMR1/bundleconfig/etc/logback.xml - ./dmaap/cadi.properties:/appl/dmaapMR1/etc/cadi.properties - networks: - integration: - aliases: - - dmaap - ipv4_address: ${IPv4_DMAAP} - ipv6_address: ${IPv6_DMAAP} - depends_on: - zookeeper - kafka - vescollector: - image: ${VESCOLLECTOR_IMAGE} - container_name: vescollector - environment: - DMAAPHOST: "onap-dmaap" - ports: - - "8080:8080" - - "8443:8443" - volumes: - - ./vescollector/collector.properties:/opt/app/VESCollector/etc/collector.properties - networks: - integration: - ipv4_address: ${IPv4_VESCOLLECTOR} - ipv6_address: ${IPv6_VESCOLLECTOR} + networks: - integration: + dmz: + driver: bridge + name: dmz + enable_ipv6: false + default: driver: bridge + name: smo enable_ipv6: true ipam: driver: default config: - - subnet: ${IPv4_NETWORK_SUBNET} - gateway: ${IPv4_GATEWAY} - - subnet: ${IPv6_NETWORK_SUBNET} - gateway: ${IPv6_GATEWAY} + - subnet: ${NETWORK_SUBNET_SMO} + gateway: ${NETWORK_GATEWAY_SMO} diff --git a/solution/integration/smo/common/docker/README.md b/solution/integration/smo/common/docker/README.md new file mode 100644 index 0000000..a36804f --- /dev/null +++ b/solution/integration/smo/common/docker/README.md @@ -0,0 +1,32 @@ +# Docker configuration + +To support IPv6 the docker configuration must be modified. + +Please see: +https://docs.docker.com/config/daemon/ipv6/ + +1. Edit /etc/docker/daemon.json, set the ipv6 key to true and the fixed-cidr-v6 key to your IPv6 subnet. In this example we are setting it to 2001:db8:1::/64. + + +``` +{ + "dns": ["1.1.1.1"], + "registry-mirrors": [ + "https://nexus3.o-ran-sc.org:10004", + "https://nexus3.onap.org:10001" + ], + "log-driver": "json-file", + "log-opts": { + "max-size": "10m", + "max-file": "3" + }, + "ipv6": true, + "fixed-cidr-v6": "2001:db8:1::/64" +} +``` + +2. Reload the Docker configuration file. + +``` +$ systemctl reload docker +``` \ No newline at end of file diff --git a/solution/integration/smo/common/docker/daemon.json b/solution/integration/smo/common/docker/daemon.json new file mode 100644 index 0000000..1573447 --- /dev/null +++ b/solution/integration/smo/common/docker/daemon.json @@ -0,0 +1,14 @@ +{ + "dns": ["1.1.1.1"], + "registry-mirrors": [ + "https://nexus3.o-ran-sc.org:10004", + "https://nexus3.onap.org:10001" + ], + "log-driver": "json-file", + "log-opts": { + "max-size": "10m", + "max-file": "3" + }, + "ipv6": true, + "fixed-cidr-v6": "2001:db8:1::/64" +} diff --git a/solution/integration/smo/common/identity/authentication.json b/solution/integration/smo/common/identity/authentication.json new file mode 100644 index 0000000..bc4a5bc --- /dev/null +++ b/solution/integration/smo/common/identity/authentication.json @@ -0,0 +1,116 @@ +{ + "roles": { + "administration": [ + { + "id": "66f90a7a-3766-4f69-989d-c94910e0bad6", + "name": "administration" + } + ], + "provision": [ + { + "id": "7c6d7309-c7c1-4a51-8a85-bd6713af5ca7", + "name": "provision" + } + ], + "supervision": [ + { + "id": "d2594199-99c2-4e0c-9b33-94b0a84b569a", + "name": "supervision" + } + ] + }, + "users": [ + { + "firstName": "Leia", + "lastName": "Organa", + "email": "leia.organa@sdnr.onap.org", + "enabled": "true", + "username": "leia.organa", + "credentials": [ + { + "type": "password", + "value": "Default4SDN!", + "temporary": false + } + ] + }, + { + "firstName": "R2", + "lastName": "D2", + "email": "r2.d2@sdnr.onap.org", + "enabled": "true", + "username": "r2.d2", + "credentials": [ + { + "type": "password", + "value": "Default4SDN!", + "temporary": false + } + ] + }, + { + "firstName": "Luke", + "lastName": "Skywalker", + "email": "luke.skywalker@sdnr.onap.org", + "enabled": "true", + "username": "luke.skywalker", + "credentials": [ + { + "type": "password", + "value": "Default4SDN!", + "temporary": false + } + ] + }, + { + "firstName": "Jargo", + "lastName": "Fett", + "email": "jargo.fett@sdnr.onap.org", + "enabled": "true", + "username": "jargo.fett", + "credentials": [ + { + "type": "password", + "value": "Default4SDN!", + "temporary": false + } + ] + }, + { + "firstName": "Martin", + "lastName": "Skorupski", + "email": "martin.skorupski@sdnr.onap.org", + "enabled": "true", + "username": "martin.skorupski", + "credentials": [ + { + "type": "password", + "value": "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U", + "temporary": false + } + ] + } + ], + "grants": [ + { + "username":"leia.organa", + "role":"administration" + }, + { + "username":"r2.d2", + "role":"administration" + }, + { + "username":"luke.skywalker", + "role":"provision" + }, + { + "username":"jargo.fett", + "role":"supervision" + }, + { + "username":"martin.skorupski", + "role":"administration" + } + ] +} \ No newline at end of file diff --git a/solution/integration/smo/common/identity/config.py b/solution/integration/smo/common/identity/config.py new file mode 100644 index 0000000..649026c --- /dev/null +++ b/solution/integration/smo/common/identity/config.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python +################################################################################ +# Copyright 2021 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. +# + +# importing the sys, json, requests library +import os +import sys +import json +import requests +import getpass + +# global configurations +# TODO: read from ../.env +base = 'http://localhost:8081' +username = 'admin' +password = 'Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U' +realmFile = os.path.dirname(os.path.abspath(__file__)) + '/o-ran-sc-realm.json' +authFile = os.path.dirname(os.path.abspath(__file__)) + '/authentication.json' + +# Request a token for futher communication +def getToken(): + url = base + '/auth/realms/master/protocol/openid-connect/token' + headers = { + 'content-type': 'application/x-www-form-urlencoded', + 'accept': 'application/json' + } + body = { + 'client_id':'admin-cli', + 'grant_type': 'password', + 'username': username, + 'password': password + } + try: + response = requests.post(url, verify=False, auth=(username, password), data=body, headers=headers) + except requests.exceptions.Timeout: + sys.exit('HTTP request failed, please check you internet connection.') + except requests.exceptions.TooManyRedirects: + sys.exit('HTTP request failed, please check your proxy settings.') + except requests.exceptions.RequestException as e: + # catastrophic error. bail. + raise SystemExit(e) + + if response.status_code >= 200 and response.status_code < 300: + print('Got tocken!') + return response.json()['access_token'] + else: + sys.exit('Getting token failed.') + +# create the default realm from file +def createRealm(token, realm): + url = base + '/auth/admin/realms' + auth = 'bearer ' + token + headers = { + 'content-type': 'application/json', + 'accept': 'application/json', + 'authorization': auth + } + try: + response = requests.post(url, verify=False, json=realm, headers=headers) + except requests.exceptions.Timeout: + sys.exit('HTTP request failed, please check you internet connection.') + except requests.exceptions.TooManyRedirects: + sys.exit('HTTP request failed, please check your proxy settings.') + except requests.exceptions.RequestException as e: + # catastrophic error. bail. + raise SystemExit(e) + + return response.status_code >= 200 and response.status_code < 300 + +# Check if default realm exists +def checkRealmExists(token, realmId): + url = base + '/auth/admin/realms/' + realmId + auth = 'bearer ' + token + headers = { + 'accept': 'application/json', + 'authorization': auth + } + try: + response = requests.get(url, verify=False, headers=headers) + except requests.exceptions.Timeout: + sys.exit('HTTP request failed, please check you internet connection.') + except requests.exceptions.TooManyRedirects: + sys.exit('HTTP request failed, please check your proxy settings.') + except requests.exceptions.RequestException as e: + # catastrophic error. bail. + raise SystemExit(e) + + if response.status_code >= 200 and response.status_code < 300: + return realmId == response.json()['id'] + else: + # sys.exit('Getting realm failed.') + return False + +# create a user in default realm +def createUser(token, realmId, user): + url = base + '/auth/admin/realms/' + realmId + '/users' + auth = 'bearer ' + token + headers = { + 'accept': 'application/json', + 'authorization': auth + } + try: + response = requests.post(url, verify=False, json=user, headers=headers) + except requests.exceptions.Timeout: + sys.exit('HTTP request failed, please check you internet connection.') + except requests.exceptions.TooManyRedirects: + sys.exit('HTTP request failed, please check your proxy settings.') + except requests.exceptions.RequestException as e: + # catastrophic error. bail. + raise SystemExit(e) + + if response.status_code >= 200 and response.status_code < 300: + print('User', user['username'], 'created!') + else: + print('User creation', user['username'], 'failed!\n', response.text) + +# creates User accounts in realm based a file +def createUsers(token, realm, authConfig): + for user in authConfig['users']: + createUser(token, realm, user) + + # create a user based on system user + systemUser = { + "firstName": getpass.getuser(), + "lastName": "", + "email": getpass.getuser() + "@sdnr.onap.org", + "enabled": "true", + "username": getpass.getuser(), + "credentials": [ + { + "type": "password", + "value": password, + "temporary": False + } + ] + } + createUser(token, realm, systemUser) + +# Grants a role to a user +def addUserRole(user, role, options): + url = options['url'] + '/' + user['id'] + '/role-mappings/realm' + try: + response = requests.post(url, verify=False, json=role, headers=options['headers']) + except requests.exceptions.Timeout: + sys.exit('HTTP request failed, please check you internet connection.') + except requests.exceptions.TooManyRedirects: + sys.exit('HTTP request failed, please check your proxy settings.') + except requests.exceptions.RequestException as e: + # catastrophic error. bail. + raise SystemExit(e) + + if response.status_code >= 200 and response.status_code < 300: + print('User role', user['username'], role[0]['name'], 'created!') + else: + print('Creation of user role', user['username'], role[0]['name'], 'failed!\n', response.text) + +# searches for the role of a given user +def findRole(user, authConfig): + roleName='administration' + for grant in authConfig['grants']: + if grant['username'] == user: + roleName= grant['role'] + role=authConfig['roles'][roleName] + return role + +# adds roles to users +def addUserRoles(token, realmId, authConfig): + url = base + '/auth/admin/realms/' + realmId + '/users' + auth = 'bearer ' + token + headers = { + 'content-type': 'application/json', + 'accept': 'application/json', + 'authorization': auth + } + try: + response = requests.get(url, verify=False, headers=headers) + except requests.exceptions.Timeout: + sys.exit('HTTP request failed, please check you internet connection.') + except requests.exceptions.TooManyRedirects: + sys.exit('HTTP request failed, please check your proxy settings.') + except requests.exceptions.RequestException as e: + # catastrophic error. bail. + raise SystemExit(e) + + if response.status_code >= 200 and response.status_code < 300: + users = response.json() + options = { + "url": url, + "auth": auth, + "headers": headers + } + for user in users: + role=findRole(user['username'], authConfig) + addUserRole(user, role, options) + else: + sys.exit('Getting users failed.') + +# main +token = getToken() +if token: + with open(realmFile) as file: + realm = json.load(file) + if not checkRealmExists(token, realm['id']): + createRealm(token, realm) + + with open(authFile) as authConfig: + auth = json.load(authConfig) + createUsers(token, realm['id'], auth); + addUserRoles(token, realm['id'], auth) diff --git a/solution/integration/smo/common/identity/o-ran-sc-realm.json b/solution/integration/smo/common/identity/o-ran-sc-realm.json new file mode 100644 index 0000000..c7621d7 --- /dev/null +++ b/solution/integration/smo/common/identity/o-ran-sc-realm.json @@ -0,0 +1,2154 @@ +{ + "id": "onap", + "realm": "onap", + "displayName": "O-RAN-SC SIM & OAM & NON-RT-RIC", + "displayNameHtml": "
O-RAN-SC: SIM and OAM and Non-RT-RIC
", + "notBefore": 1606124502, + "revokeRefreshToken": false, + "refreshTokenMaxReuse": 0, + "accessTokenLifespan": 300, + "accessTokenLifespanForImplicitFlow": 900, + "ssoSessionIdleTimeout": 1800, + "ssoSessionMaxLifespan": 36000, + "ssoSessionIdleTimeoutRememberMe": 0, + "ssoSessionMaxLifespanRememberMe": 0, + "offlineSessionIdleTimeout": 2592000, + "offlineSessionMaxLifespanEnabled": false, + "offlineSessionMaxLifespan": 5184000, + "clientSessionIdleTimeout": 0, + "clientSessionMaxLifespan": 0, + "clientOfflineSessionIdleTimeout": 0, + "clientOfflineSessionMaxLifespan": 0, + "accessCodeLifespan": 60, + "accessCodeLifespanUserAction": 300, + "accessCodeLifespanLogin": 1800, + "actionTokenGeneratedByAdminLifespan": 43200, + "actionTokenGeneratedByUserLifespan": 300, + "enabled": true, + "sslRequired": "external", + "registrationAllowed": false, + "registrationEmailAsUsername": false, + "rememberMe": true, + "verifyEmail": false, + "loginWithEmailAllowed": true, + "duplicateEmailsAllowed": false, + "resetPasswordAllowed": false, + "editUsernameAllowed": false, + "bruteForceProtected": false, + "permanentLockout": false, + "maxFailureWaitSeconds": 900, + "minimumQuickLoginWaitSeconds": 60, + "waitIncrementSeconds": 60, + "quickLoginCheckMilliSeconds": 1000, + "maxDeltaTimeSeconds": 43200, + "failureFactor": 30, + "roles": { + "realm": [ + { + "id": "66f90a7a-3766-4f69-989d-c94910e0bad6", + "name": "administration", + "description": "Read/write access to all operations.", + "composite": false, + "clientRole": false, + "containerId": "onap", + "attributes": {} + }, + { + "id": "d2594199-99c2-4e0c-9b33-94b0a84b569a", + "name": "supervision", + "description": "In general no write access and also no read access to user-management.", + "composite": false, + "clientRole": false, + "containerId": "onap", + "attributes": {} + }, + { + "id": "db6e98ed-5fa8-4471-9522-ba12a8732e08", + "name": "uma_authorization", + "description": "${role_uma_authorization}", + "composite": false, + "clientRole": false, + "containerId": "onap", + "attributes": {} + }, + { + "id": "e344eb3a-8efe-4346-b5d4-93b9262cf0ec", + "name": "offline_access", + "description": "${role_offline-access}", + "composite": false, + "clientRole": false, + "containerId": "onap", + "attributes": {} + }, + { + "id": "7c6d7309-c7c1-4a51-8a85-bd6713af5ca7", + "name": "provision", + "description": "In general read/write access, expect write access to user-management.", + "composite": false, + "clientRole": false, + "containerId": "onap", + "attributes": {} + } + ], + "client": { + "realm-management": [ + { + "id": "48cf3c96-5ef0-4a91-a95f-149234d0b595", + "name": "manage-identity-providers", + "description": "${role_manage-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "97066b13-50b7-4556-8c33-b06279ee26b7", + "name": "query-realms", + "description": "${role_query-realms}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "120f58c7-3850-487e-9733-a9b98ac43921", + "name": "view-events", + "description": "${role_view-events}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "4ab08158-f781-448f-a394-d0022957c2d8", + "name": "manage-users", + "description": "${role_manage-users}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "a2aeee62-6cfa-4968-be7c-b861ca16d9ae", + "name": "impersonation", + "description": "${role_impersonation}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "cddc6aa1-d8d8-4a4b-a6d0-15576ca147cc", + "name": "manage-authorization", + "description": "${role_manage-authorization}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "f139916a-75d6-44e2-8fb2-818cabc9aa79", + "name": "query-users", + "description": "${role_query-users}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "51216a0a-b1cb-4bbf-966a-6d6b9a430981", + "name": "query-clients", + "description": "${role_query-clients}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "77174699-6e58-4515-a4de-fc0c5f1b84aa", + "name": "manage-events", + "description": "${role_manage-events}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "34107e13-212e-4b07-a00a-0cb422cb1b18", + "name": "view-authorization", + "description": "${role_view-authorization}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "b2460807-5207-4112-ae9d-931e1ea8e495", + "name": "manage-realm", + "description": "${role_manage-realm}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "36454cac-a7b4-49a2-9202-7e9253680709", + "name": "view-clients", + "description": "${role_view-clients}", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "query-clients" + ] + } + }, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "bd6536a5-fb15-4d9d-acd4-05af2f5f0872", + "name": "manage-clients", + "description": "${role_manage-clients}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "0413ee3e-5669-45e2-a62e-013e5fa9f95c", + "name": "view-identity-providers", + "description": "${role_view-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "a7f035f6-bcb3-4a3e-9aba-b9d8151ae1e2", + "name": "create-client", + "description": "${role_create-client}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "6f755449-81aa-413c-b9a2-f1a04a310216", + "name": "realm-admin", + "description": "${role_realm-admin}", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "view-events", + "manage-identity-providers", + "query-realms", + "manage-users", + "impersonation", + "manage-authorization", + "query-users", + "query-clients", + "manage-events", + "view-authorization", + "manage-realm", + "view-clients", + "manage-clients", + "view-identity-providers", + "create-client", + "view-realm", + "view-users", + "query-groups" + ] + } + }, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "b84067d9-c1a0-473b-9a8d-c9da11d702d0", + "name": "view-realm", + "description": "${role_view-realm}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "f93e22e0-4777-4eed-8793-54344e3912b8", + "name": "view-users", + "description": "${role_view-users}", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "query-users", + "query-groups" + ] + } + }, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + }, + { + "id": "0a21201d-d801-4905-bd24-15a0b6b672bd", + "name": "query-groups", + "description": "${role_query-groups}", + "composite": false, + "clientRole": true, + "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "attributes": {} + } + ], + "odlux.app": [], + "security-admin-console": [], + "admin-cli": [], + "account-console": [], + "broker": [ + { + "id": "0ffc5717-546e-4bc9-a5ac-402cf244b8ef", + "name": "read-token", + "description": "${role_read-token}", + "composite": false, + "clientRole": true, + "containerId": "03f925c3-3688-44fc-80da-57a15e48f9c6", + "attributes": {} + } + ], + "account": [ + { + "id": "73a6e64c-673d-41f8-891d-35cdf18530a2", + "name": "view-consent", + "description": "${role_view-consent}", + "composite": false, + "clientRole": true, + "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e", + "attributes": {} + }, + { + "id": "ad1c45b0-c118-423c-932b-4d37a1e22169", + "name": "manage-account-links", + "description": "${role_manage-account-links}", + "composite": false, + "clientRole": true, + "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e", + "attributes": {} + }, + { + "id": "5a945b4b-5982-4340-a2b9-464edacb5280", + "name": "manage-consent", + "description": "${role_manage-consent}", + "composite": true, + "composites": { + "client": { + "account": [ + "view-consent" + ] + } + }, + "clientRole": true, + "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e", + "attributes": {} + }, + { + "id": "27c9a3d3-78e9-4ca3-940c-3a3c16cac97f", + "name": "view-profile", + "description": "${role_view-profile}", + "composite": false, + "clientRole": true, + "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e", + "attributes": {} + }, + { + "id": "0dc10caf-b2f3-42e2-af88-c6c3d8f170ad", + "name": "delete-account", + "description": "${role_delete-account}", + "composite": false, + "clientRole": true, + "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e", + "attributes": {} + }, + { + "id": "b3ff60e4-53e9-4a78-9855-3e7a13608a37", + "name": "manage-account", + "description": "${role_manage-account}", + "composite": true, + "composites": { + "client": { + "account": [ + "manage-account-links" + ] + } + }, + "clientRole": true, + "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e", + "attributes": {} + }, + { + "id": "9fbd7ab1-300f-4bf4-8e3f-9de42ea841f4", + "name": "view-applications", + "description": "${role_view-applications}", + "composite": false, + "clientRole": true, + "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e", + "attributes": {} + } + ] + } + }, + "groups": [ + { + "id": "53697740-dd18-4170-bcc7-5386d68bee12", + "name": "NetworkAdministration", + "path": "/NetworkAdministration", + "attributes": {}, + "realmRoles": [ + "administration" + ], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "7416392a-8a94-48a0-b2f4-32355df722ee", + "name": "NetworkOperation", + "path": "/NetworkOperation", + "attributes": {}, + "realmRoles": [ + "provision" + ], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "2627fd3e-5991-4464-8d46-5accfa7f49d9", + "name": "NetworkPlanning", + "path": "/NetworkPlanning", + "attributes": {}, + "realmRoles": [ + "supervision" + ], + "clientRoles": {}, + "subGroups": [] + } + ], + "defaultRoles": [ + "uma_authorization", + "offline_access" + ], + "requiredCredentials": [ + "password" + ], + "otpPolicyType": "totp", + "otpPolicyAlgorithm": "HmacSHA1", + "otpPolicyInitialCounter": 0, + "otpPolicyDigits": 6, + "otpPolicyLookAheadWindow": 1, + "otpPolicyPeriod": 30, + "otpSupportedApplications": [ + "FreeOTP", + "Google Authenticator" + ], + "webAuthnPolicyRpEntityName": "keycloak", + "webAuthnPolicySignatureAlgorithms": [ + "ES256" + ], + "webAuthnPolicyRpId": "", + "webAuthnPolicyAttestationConveyancePreference": "not specified", + "webAuthnPolicyAuthenticatorAttachment": "not specified", + "webAuthnPolicyRequireResidentKey": "not specified", + "webAuthnPolicyUserVerificationRequirement": "not specified", + "webAuthnPolicyCreateTimeout": 0, + "webAuthnPolicyAvoidSameAuthenticatorRegister": false, + "webAuthnPolicyAcceptableAaguids": [], + "webAuthnPolicyPasswordlessRpEntityName": "keycloak", + "webAuthnPolicyPasswordlessSignatureAlgorithms": [ + "ES256" + ], + "webAuthnPolicyPasswordlessRpId": "", + "webAuthnPolicyPasswordlessAttestationConveyancePreference": "not specified", + "webAuthnPolicyPasswordlessAuthenticatorAttachment": "not specified", + "webAuthnPolicyPasswordlessRequireResidentKey": "not specified", + "webAuthnPolicyPasswordlessUserVerificationRequirement": "not specified", + "webAuthnPolicyPasswordlessCreateTimeout": 0, + "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister": false, + "webAuthnPolicyPasswordlessAcceptableAaguids": [], + "scopeMappings": [ + { + "clientScope": "offline_access", + "roles": [ + "offline_access" + ] + } + ], + "clientScopeMappings": { + "account": [ + { + "client": "account-console", + "roles": [ + "manage-account" + ] + } + ] + }, + "clients": [ + { + "id": "79520b16-34b6-4427-8c0f-40ef1e514d5e", + "clientId": "account", + "name": "${client_account}", + "rootUrl": "${authBaseUrl}", + "baseUrl": "/realms/onap-oam-joins-non-rt-ric/account/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "defaultRoles": [ + "view-profile", + "manage-account" + ], + "redirectUris": [ + "/realms/onap-oam-joins-non-rt-ric/account/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "9e6bfeba-bdd0-480f-b5a2-872613bc8f5c", + "clientId": "account-console", + "name": "${client_account-console}", + "rootUrl": "${authBaseUrl}", + "baseUrl": "/realms/onap-oam-joins-non-rt-ric/account/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "/realms/onap-oam-joins-non-rt-ric/account/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "pkce.code.challenge.method": "S256" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "7c4d0074-59ac-48de-a13d-ff68f061b5aa", + "name": "audience resolve", + "protocol": "openid-connect", + "protocolMapper": "oidc-audience-resolve-mapper", + "consentRequired": false, + "config": {} + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "42be94b8-40c9-4874-9d6e-9501d12f73a5", + "clientId": "admin-cli", + "name": "${client_admin-cli}", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "access.token.lifespan": "1200", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "03f925c3-3688-44fc-80da-57a15e48f9c6", + "clientId": "broker", + "name": "${client_broker}", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "dbd662ad-e959-44c9-bd18-859ca0142927", + "clientId": "odlux.app", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "secret": "2a64fdca-c205-4b52-9f58-195ccc142ddb", + "redirectUris": [ + "http://localhost:8081/*", + "https://sdnc-web:8453/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "access.token.lifespan": "1800", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "backchannel.logout.revoke.offline.tokens": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "backchannel.logout.session.required": "false", + "client_credentials.use_refresh_token": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": { + "direct_grant": "dfb7f7d8-1260-4d25-ac2c-b04b029bc63f", + "browser": "158733a4-43f8-4cbc-922d-5017939ad0dc" + }, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3", + "clientId": "realm-management", + "name": "${client_realm-management}", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": true, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "458df016-a86f-4750-979b-7f4bc20d9bed", + "clientId": "security-admin-console", + "name": "${client_security-admin-console}", + "rootUrl": "${authAdminUrl}", + "baseUrl": "/admin/onap-oam-joins-non-rt-ric/console/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "/admin/onap-oam-joins-non-rt-ric/console/*" + ], + "webOrigins": [ + "+" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "pkce.code.challenge.method": "S256" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "7a2b5c79-4775-4f07-810f-f101774cd086", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + } + ], + "clientScopes": [ + { + "id": "6dd0bccf-179e-4d35-acd0-03aa6ef2153d", + "name": "address", + "description": "OpenID Connect built-in scope: address", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${addressScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "6c342dae-9652-49f9-8327-ec2c3ddcd159", + "name": "address", + "protocol": "openid-connect", + "protocolMapper": "oidc-address-mapper", + "consentRequired": false, + "config": { + "user.attribute.formatted": "formatted", + "user.attribute.country": "country", + "user.attribute.postal_code": "postal_code", + "userinfo.token.claim": "true", + "user.attribute.street": "street", + "id.token.claim": "true", + "user.attribute.region": "region", + "access.token.claim": "true", + "user.attribute.locality": "locality" + } + } + ] + }, + { + "id": "452eb724-9c8c-4d5b-8e3a-c40dfab97fd6", + "name": "email", + "description": "OpenID Connect built-in scope: email", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${emailScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "e7e9a9b0-0aeb-4d44-bb6d-8d287050521c", + "name": "email verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "emailVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email_verified", + "jsonType.label": "boolean" + } + }, + { + "id": "b9fc29ad-dd40-42c5-939c-315f661ac889", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "49f39fbb-5b69-452a-b2b4-064f3e8f23e4", + "name": "microprofile-jwt", + "description": "Microprofile - JWT built-in scope", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + }, + "protocolMappers": [ + { + "id": "ed60115c-0fb1-4c4f-8134-11751957a241", + "name": "upn", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "upn", + "jsonType.label": "String" + } + }, + { + "id": "c88ed97f-9f0e-4d16-a1b2-1cb22e37fc46", + "name": "groups", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "multivalued": "true", + "userinfo.token.claim": "true", + "user.attribute": "foo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "groups", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "cf78afd0-da31-4e37-8503-618bf3f1da2b", + "name": "offline_access", + "description": "OpenID Connect built-in scope: offline_access", + "protocol": "openid-connect", + "attributes": { + "consent.screen.text": "${offlineAccessScopeConsentText}", + "display.on.consent.screen": "true" + } + }, + { + "id": "7b1e27d0-17c0-4358-9e15-ff3dd48afe74", + "name": "phone", + "description": "OpenID Connect built-in scope: phone", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${phoneScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "33ad6d44-00c7-4ef1-88aa-2d3929225806", + "name": "phone number verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumberVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number_verified", + "jsonType.label": "boolean" + } + }, + { + "id": "71d82f58-9411-4d7b-89a4-5f8e7cca6f7d", + "name": "phone number", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumber", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "a226a318-27ab-472e-b53e-a8f6bb7fac28", + "name": "profile", + "description": "OpenID Connect built-in scope: profile", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${profileScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "5e8ecd21-c433-4b17-aacc-a01586532fd9", + "name": "gender", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "gender", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "gender", + "jsonType.label": "String" + } + }, + { + "id": "cf587792-5813-4fe3-a16d-4ce4d4c92b50", + "name": "updated at", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "updatedAt", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "updated_at", + "jsonType.label": "String" + } + }, + { + "id": "65b516e5-e573-46a7-a721-141647220ae2", + "name": "birthdate", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "birthdate", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "birthdate", + "jsonType.label": "String" + } + }, + { + "id": "d6e02648-07f1-4e6e-940a-f0a6997af1ec", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "957e23f0-14fa-4959-b44d-7ee628302664", + "name": "nickname", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "nickname", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "nickname", + "jsonType.label": "String" + } + }, + { + "id": "8f73eeed-e3fe-4086-8d56-ed488939bf7a", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "987d88f4-0803-4bf1-96d4-ba0badf95656", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "de495b80-7a8c-47b6-bba5-534f59431156", + "name": "middle name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "middleName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "middle_name", + "jsonType.label": "String" + } + }, + { + "id": "176751a4-b631-4521-a9b4-0275d55c0846", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + }, + { + "id": "37a41d7d-3f1b-4290-8885-2fbe197297eb", + "name": "zoneinfo", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "zoneinfo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "zoneinfo", + "jsonType.label": "String" + } + }, + { + "id": "f639ac53-4c08-416b-828f-b06e6f5f59cf", + "name": "website", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "website", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "website", + "jsonType.label": "String" + } + }, + { + "id": "acac2472-8d13-4c22-929d-9c364e3af1dc", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "b748d016-ce62-4cf2-bf0f-78482f90c4e0", + "name": "picture", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "picture", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "picture", + "jsonType.label": "String" + } + }, + { + "id": "e8d61aee-2580-4aec-9c99-9310e0b10637", + "name": "profile", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "profile", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "profile", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "7b6ec9ac-c5b6-4096-8b48-5a27d9a4b3fd", + "name": "role_list", + "description": "SAML role list", + "protocol": "saml", + "attributes": { + "consent.screen.text": "${samlRoleListScopeConsentText}", + "display.on.consent.screen": "true" + }, + "protocolMappers": [ + { + "id": "924fba2b-b443-4160-96dd-5a8d7b5fe685", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + } + ] + }, + { + "id": "6ccb6ae1-d28c-42a0-a59d-2c3d8429e96f", + "name": "roles", + "description": "OpenID Connect scope for add user roles to the access token", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "false", + "display.on.consent.screen": "true", + "consent.screen.text": "${rolesScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "1968a6ac-cf1c-4d15-a4fe-f5206f73e0b9", + "name": "client roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-client-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "true", + "claim.name": "resource_access.${client_id}.roles", + "jsonType.label": "String", + "multivalued": "true" + } + }, + { + "id": "800d0b8f-42f0-4990-81a6-4cc513097ba7", + "name": "realm roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "true", + "claim.name": "realm_access.roles", + "jsonType.label": "String", + "multivalued": "true" + } + }, + { + "id": "ccaf8f4b-1050-4aca-a54f-5832873a7cfe", + "name": "audience resolve", + "protocol": "openid-connect", + "protocolMapper": "oidc-audience-resolve-mapper", + "consentRequired": false, + "config": {} + } + ] + }, + { + "id": "04affd50-f5ca-476a-960f-21935af0ab5d", + "name": "web-origins", + "description": "OpenID Connect scope for add allowed web origins to the access token", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "false", + "display.on.consent.screen": "false", + "consent.screen.text": "" + }, + "protocolMappers": [ + { + "id": "f4e1fc1e-454a-46b6-a660-5066aecbb363", + "name": "allowed web origins", + "protocol": "openid-connect", + "protocolMapper": "oidc-allowed-origins-mapper", + "consentRequired": false, + "config": {} + } + ] + } + ], + "defaultDefaultClientScopes": [ + "web-origins", + "email", + "roles", + "role_list", + "profile" + ], + "defaultOptionalClientScopes": [ + "microprofile-jwt", + "address", + "phone", + "offline_access" + ], + "browserSecurityHeaders": { + "contentSecurityPolicyReportOnly": "", + "xContentTypeOptions": "nosniff", + "xRobotsTag": "none", + "xFrameOptions": "SAMEORIGIN", + "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", + "xXSSProtection": "1; mode=block", + "strictTransportSecurity": "max-age=31536000; includeSubDomains" + }, + "smtpServer": {}, + "eventsEnabled": false, + "eventsListeners": [ + "jboss-logging" + ], + "enabledEventTypes": [], + "adminEventsEnabled": false, + "adminEventsDetailsEnabled": false, + "identityProviders": [], + "identityProviderMappers": [], + "components": { + "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ + { + "id": "0c44905c-8894-4af1-8e5b-75370102ebc7", + "name": "Max Clients Limit", + "providerId": "max-clients", + "subType": "anonymous", + "subComponents": {}, + "config": { + "max-clients": [ + "200" + ] + } + }, + { + "id": "b191c0f5-a3b0-4f59-bd83-070d3b6c2b28", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "saml-role-list-mapper", + "oidc-sha256-pairwise-sub-mapper", + "saml-user-attribute-mapper", + "oidc-usermodel-property-mapper", + "oidc-address-mapper", + "oidc-full-name-mapper", + "saml-user-property-mapper", + "oidc-usermodel-attribute-mapper" + ] + } + }, + { + "id": "d152b7b9-d519-48bc-ac78-1dc3c08c4569", + "name": "Trusted Hosts", + "providerId": "trusted-hosts", + "subType": "anonymous", + "subComponents": {}, + "config": { + "host-sending-registration-request-must-match": [ + "true" + ], + "client-uris-must-match": [ + "true" + ] + } + }, + { + "id": "724d468e-c5da-4189-b51e-0c43ee65ef90", + "name": "Consent Required", + "providerId": "consent-required", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "id": "409f70ab-abe9-4f3e-873f-ae3c717af73e", + "name": "Allowed Client Scopes", + "providerId": "allowed-client-templates", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allow-default-scopes": [ + "true" + ] + } + }, + { + "id": "46ebd6ed-3ad9-433f-b8e1-9a87d971f490", + "name": "Full Scope Disabled", + "providerId": "scope", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "id": "61c5003c-94ee-44de-8e1c-f892f5e09488", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "oidc-usermodel-property-mapper", + "oidc-full-name-mapper", + "saml-role-list-mapper", + "oidc-address-mapper", + "oidc-sha256-pairwise-sub-mapper", + "oidc-usermodel-attribute-mapper", + "saml-user-attribute-mapper", + "saml-user-property-mapper" + ] + } + }, + { + "id": "da534621-02b7-4ccc-b14b-6a9a3648961d", + "name": "Allowed Client Scopes", + "providerId": "allowed-client-templates", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allow-default-scopes": [ + "true" + ] + } + } + ], + "org.keycloak.keys.KeyProvider": [ + { + "id": "9890b674-2409-4e30-95e8-0c66775d0dec", + "name": "rsa-generated", + "providerId": "rsa-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ] + } + }, + { + "id": "447f9685-f16b-463c-9ee1-ed1ae487fa06", + "name": "aes-generated", + "providerId": "aes-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ] + } + }, + { + "id": "198c0d7e-ee71-4b28-86ab-3cd3b0f45231", + "name": "hmac-generated", + "providerId": "hmac-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ], + "algorithm": [ + "HS256" + ] + } + } + ] + }, + "internationalizationEnabled": false, + "supportedLocales": [], + "authenticationFlows": [ + { + "id": "0ee220ce-108a-409c-83c2-a5686323b9ee", + "alias": "Account verification options", + "description": "Method with which to verity the existing account", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-email-verification", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 20, + "flowAlias": "Verify Existing Account by Re-authentication", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "d21dab1e-44d5-4e02-ad5d-544ac4fb6c3c", + "alias": "Authentication Options", + "description": "Authentication options.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "basic-auth", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "basic-auth-otp", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "requirement": "DISABLED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "ec170205-9818-4cd2-9aff-d57c3c47a0a8", + "alias": "Browser - Conditional OTP", + "description": "Flow to determine if the OTP is required for the authentication", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "7867cf39-84c1-4061-8d7a-000ffd974a06", + "alias": "Direct Grant - Conditional OTP", + "description": "Flow to determine if the OTP is required for the authentication", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-otp", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "eb496420-e54b-41e4-abdb-c5179dc345af", + "alias": "First broker login - Conditional OTP", + "description": "Flow to determine if the OTP is required for the authentication", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "bbf7a7ae-352b-44f4-83ab-1b3adcc0470c", + "alias": "Handle Existing Account", + "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-confirm-link", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "REQUIRED", + "priority": 20, + "flowAlias": "Account verification options", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "74ec31d4-b70d-45db-817d-998ca47dca3f", + "alias": "Reset - Conditional OTP", + "description": "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-otp", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "f0f868e5-da82-4ab3-8a39-4b02417ec001", + "alias": "User creation or linking", + "description": "Flow for the existing/non-existing user alternatives", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticatorConfig": "create unique user config", + "authenticator": "idp-create-user-if-unique", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 20, + "flowAlias": "Handle Existing Account", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "78059620-abd8-4e1c-97a5-dd25bf456a29", + "alias": "Verify Existing Account by Re-authentication", + "description": "Reauthentication of existing account", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-username-password-form", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "CONDITIONAL", + "priority": 20, + "flowAlias": "First broker login - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "158733a4-43f8-4cbc-922d-5017939ad0dc", + "alias": "browser", + "description": "browser based authentication", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-cookie", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "identity-provider-redirector", + "requirement": "ALTERNATIVE", + "priority": 25, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "forms", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "9027d460-c6c3-49d9-869d-108acba1609c", + "alias": "clients", + "description": "Base authentication for clients", + "providerId": "client-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "client-secret", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-jwt", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-secret-jwt", + "requirement": "ALTERNATIVE", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-x509", + "requirement": "ALTERNATIVE", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "dfb7f7d8-1260-4d25-ac2c-b04b029bc63f", + "alias": "direct grant", + "description": "OpenID Connect Resource Owner Grant", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "direct-grant-validate-username", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-password", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "CONDITIONAL", + "priority": 30, + "flowAlias": "Direct Grant - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "58f57ccc-d878-4670-bffa-be9f4754df62", + "alias": "docker auth", + "description": "Used by Docker clients to authenticate against the IDP", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "docker-http-basic-authenticator", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "c5d1f9d8-1d25-4654-adf8-0a83f0c98303", + "alias": "first broker login", + "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticatorConfig": "review profile config", + "authenticator": "idp-review-profile", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "REQUIRED", + "priority": 20, + "flowAlias": "User creation or linking", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "84eccfe4-1192-4a02-a5ed-f4ff7a5a1442", + "alias": "forms", + "description": "Username, password, otp and other auth forms.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-username-password-form", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "CONDITIONAL", + "priority": 20, + "flowAlias": "Browser - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "a2f8ce9d-0206-4ea5-b09a-e660e551c2c0", + "alias": "http challenge", + "description": "An authentication flow based on challenge-response HTTP Authentication Schemes", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "no-cookie-redirect", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "REQUIRED", + "priority": 20, + "flowAlias": "Authentication Options", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "112ed8a8-631c-455e-9dbc-34935b74b237", + "alias": "registration", + "description": "registration flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-page-form", + "requirement": "REQUIRED", + "priority": 10, + "flowAlias": "registration form", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "f15cdba2-4e59-4c06-9819-604f9eb811d0", + "alias": "registration form", + "description": "registration form", + "providerId": "form-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-user-creation", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-profile-action", + "requirement": "REQUIRED", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-password-action", + "requirement": "REQUIRED", + "priority": 50, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-recaptcha-action", + "requirement": "DISABLED", + "priority": 60, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "182c33c2-1b63-4a77-bbde-54af459f94b6", + "alias": "reset credentials", + "description": "Reset credentials for a user if they forgot their password or something", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "reset-credentials-choose-user", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-credential-email", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-password", + "requirement": "REQUIRED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "CONDITIONAL", + "priority": 40, + "flowAlias": "Reset - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "bd4486c6-1f69-45fd-b0c7-cbeeaf9e4f21", + "alias": "saml ecp", + "description": "SAML ECP Profile Authentication Flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "http-basic-authenticator", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + } + ], + "authenticatorConfig": [ + { + "id": "476c8235-6510-4a4f-ae77-dc711b1792ac", + "alias": "create unique user config", + "config": { + "require.password.update.after.registration": "false" + } + }, + { + "id": "6e78f8d6-1611-441a-b0da-df6570583564", + "alias": "review profile config", + "config": { + "update.profile.on.first.login": "missing" + } + } + ], + "requiredActions": [ + { + "alias": "CONFIGURE_TOTP", + "name": "Configure OTP", + "providerId": "CONFIGURE_TOTP", + "enabled": true, + "defaultAction": false, + "priority": 10, + "config": {} + }, + { + "alias": "terms_and_conditions", + "name": "Terms and Conditions", + "providerId": "terms_and_conditions", + "enabled": false, + "defaultAction": false, + "priority": 20, + "config": {} + }, + { + "alias": "UPDATE_PASSWORD", + "name": "Update Password", + "providerId": "UPDATE_PASSWORD", + "enabled": true, + "defaultAction": false, + "priority": 30, + "config": {} + }, + { + "alias": "UPDATE_PROFILE", + "name": "Update Profile", + "providerId": "UPDATE_PROFILE", + "enabled": true, + "defaultAction": false, + "priority": 40, + "config": {} + }, + { + "alias": "VERIFY_EMAIL", + "name": "Verify Email", + "providerId": "VERIFY_EMAIL", + "enabled": true, + "defaultAction": false, + "priority": 50, + "config": {} + }, + { + "alias": "delete_account", + "name": "Delete Account", + "providerId": "delete_account", + "enabled": false, + "defaultAction": false, + "priority": 60, + "config": {} + }, + { + "alias": "update_user_locale", + "name": "Update User Locale", + "providerId": "update_user_locale", + "enabled": true, + "defaultAction": false, + "priority": 1000, + "config": {} + } + ], + "browserFlow": "browser", + "registrationFlow": "registration", + "directGrantFlow": "direct grant", + "resetCredentialsFlow": "reset credentials", + "clientAuthenticationFlow": "clients", + "dockerAuthenticationFlow": "docker auth", + "attributes": { + "clientOfflineSessionMaxLifespan": "0", + "clientSessionIdleTimeout": "0", + "clientSessionMaxLifespan": "0", + "clientOfflineSessionIdleTimeout": "0" + }, + "keycloakVersion": "12.0.4", + "userManagedAccessAllowed": false +} diff --git a/solution/integration/smo/common/identity/standalone.xml b/solution/integration/smo/common/identity/standalone.xml new file mode 100644 index 0000000..7097355 --- /dev/null +++ b/solution/integration/smo/common/identity/standalone.xml @@ -0,0 +1,602 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + h2 + + sa + sa + + + + jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE + h2 + + sa + sa + + + + + org.h2.jdbcx.JdbcDataSource + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auth + + + classpath:${jboss.home.dir}/providers/* + + + master + 900 + + 2592000 + true + true + ${env.KEYCLOAK_WELCOME_THEME:keycloak} + ${env.KEYCLOAK_DEFAULT_THEME:keycloak} + ${jboss.home.dir}/themes + + + + + + + + + + + + + jpa + + + basic + + + + + + + + + + + + + + + + + + + default + + + + + + + + ${keycloak.jta.lookup.provider:jboss} + + + + + + + + + + + ${keycloak.x509cert.lookup.provider:default} + + + + ${keycloak.hostname.provider:default} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/solution/integration/smo/kafka/zk_client_jaas.conf b/solution/integration/smo/common/kafka/zk_client_jaas.conf similarity index 100% rename from solution/integration/smo/kafka/zk_client_jaas.conf rename to solution/integration/smo/common/kafka/zk_client_jaas.conf diff --git a/solution/integration/smo/zk/zk_server_jaas.conf b/solution/integration/smo/common/zookeeper/zk_server_jaas.conf similarity index 100% rename from solution/integration/smo/zk/zk_server_jaas.conf rename to solution/integration/smo/common/zookeeper/zk_server_jaas.conf diff --git a/solution/integration/smo/oam/.env b/solution/integration/smo/oam/.env new file mode 100644 index 0000000..15e585a --- /dev/null +++ b/solution/integration/smo/oam/.env @@ -0,0 +1,45 @@ +################################################################################ +# Copyright 2021 highstreet technologies and others +# +# 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. +# + +COMPOSE_PROJECT_NAME=o-ran-sc-d-release + +# Credentials +ADMIN_USERNAME=admin +ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U + +# Network settings + +# Please update /etc/docker/daemon.json accordingly +# https://docs.docker.com/config/daemon/ipv6/ +NETWORK_SUBNET_OAM_IPv6=2001:db8:1:50::/96 +NETWORK_GATEWAY_OAM_IPv6=2001:db8:1:50::1 + +# Identity server +IDENTITY_PROVIDER_URL=http://identity:8081 + +# SDN Controller +SDNC_IMAGE=docker.io/hightec/smo-onap-sdnc-image:2.1.5 +SDNC_REST_PORT=8181 +SDNC_OAM_IPv6=2001:db8:1:50::23 +SDNC_CERT_DIR=/opt/opendaylight/current/certs + +# SDN Controller Web +SDNC_WEB_IMAGE=docker.io/hightec/smo-sdnc-web-image:2.2.0-SNAPSHOT-20210604T122348Z +SDNC_WEB_PORT=8453 + +## VES Collector +VES_COLLECTOR_IMAGE=nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.8.0 +VES_COLLECTOR_OAM_IPv6=2001:db8:1:50::27 diff --git a/solution/integration/smo/oam/docker-compose.yml b/solution/integration/smo/oam/docker-compose.yml new file mode 100755 index 0000000..14550a0 --- /dev/null +++ b/solution/integration/smo/oam/docker-compose.yml @@ -0,0 +1,108 @@ +################################################################################ +# Copyright 2021 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. +# +version: '3.8' +services: + sdnc-web: + image: ${SDNC_WEB_IMAGE} + container_name: sdnc-web + ports: + - ${SDNC_WEB_PORT}:${SDNC_WEB_PORT} + environment: + - ENABLE_OAUTH=true + - WEBPROTOCOL=HTTPS + - WEBPORT=${SDNC_WEB_PORT} + - SDNRPROTOCOL=http + - SDNRHOST=sdnr + - SDNRPORT=${SDNC_REST_PORT} + - SSL_CERT_DIR=/opt/app/osaaf/local/certs + - SSL_CERTIFICATE=cert.pem + - SSL_CERTIFICATE_KEY=key.pem + - TOPOURL=http://topology:3001 + - TILEURL=https://tile.openstreetmap.org + volumes: + - ./sdnc-web:/opt/app/osaaf/local/certs + networks: + dmz: + smo: + + sdnr: + image: ${SDNC_IMAGE} + container_name: sdnr + ports: + - ${SDNC_REST_PORT}:8181 + - 8101:8101 + - 6666:6666 + - 4335:4335 + environment: + - SDNC_CONFIG_DIR=/opt/onap/ccsdk/data/properties + - ODL_CERT_DIR=${SDNC_CERT_DIR} + - ENABLE_ODL_CLUSTER=false + - SDNC_REPLICAS=0 + - CCSDK_REPLICAS=0 + - DOMAIN="" + - SDNRWT=true + - SDNRONLY=true + - SDNRINIT=true + - SDNRDM=true + - SDNRDBURL=http://persistence:9200 + - A1_ADAPTER_NORTHBOUND=false + - ODL_ADMIN_PASSWORD=${ADMIN_PASSWORD} + - ENABLE_OAUTH=true + - SDNR_NETCONF_CALLHOME_ENABLED=true + - JAVA_OPTS=-Xms256m -Xmx4g + - IDENTITY_PROVIDER_URL=${IDENTITY_PROVIDER_URL} + - SDNC_WEB_URL=https://sdnc-web:${SDNC_WEB_PORT} + volumes: + - ./sdnr/oauth-provider.config.json:/opt/opendaylight/etc/oauth-provider.config.json + - ./sdnr/devicemanager.properties:/opt/opendaylight/etc/devicemanager.properties + - ./sdnr/mountpoint-registrar.properties:/opt/opendaylight/etc/mountpoint-registrar.properties + - ./sdnr/certs/certs.properties:${SDNC_CERT_DIR}/certs.properties + - ./sdnr/certs/keys0.zip:${SDNC_CERT_DIR}/keys0.zip + networks: + dmz: + smo: + default: + ipv6_address: ${SDNC_OAM_IPv6} + + ves-collector: + image: ${VES_COLLECTOR_IMAGE} + container_name: ves-collector + environment: + DMAAPHOST: onap-dmaap + ports: + - 8080:8080 + - 8443:8443 + volumes: + - ./ves-collector/collector.properties:/opt/app/VESCollector/etc/collector.properties + networks: + smo: + default: + ipv6_address: ${VES_COLLECTOR_OAM_IPv6} + +networks: + dmz: + external: true + smo: + external: true + default: + driver: bridge + name: oam + enable_ipv6: true + ipam: + driver: default + config: + - subnet: ${NETWORK_SUBNET_OAM_IPv6} + gateway: ${NETWORK_GATEWAY_OAM_IPv6} diff --git a/solution/integration/smo/oam/sdnc-web/cacert.pem b/solution/integration/smo/oam/sdnc-web/cacert.pem new file mode 100644 index 0000000..0146e6b --- /dev/null +++ b/solution/integration/smo/oam/sdnc-web/cacert.pem @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFPjCCAyagAwIBAgIJAJ6u7cCnzrWdMA0GCSqGSIb3DQEBCwUAMCwxDjAMBgNV +BAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzAeFw0xODA0MDUx +NDE1MjhaFw0zODAzMzExNDE1MjhaMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQK +DARPTkFQMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAMA5pkgRs7NhGG4ew5JouhyYakgYUyFaG121+/h8qbSdt0hVQv56+EA41Yq7 +XGie7RYDQK9NmAFF3gruE+6X7wvJiChp+Cyd7sFMnb65uWhxEdxWTM2BJFrgfzUn +H8ZCxgaCo3XH4PzlKRy2LQQJEJECwl/RZmRCXijMt5e9h8XoZY/fKkKcZZUsWNCM +pTo266wjvA9MXLmdgReRj0+vrCjrNqy+htwJDztoiHWiYPqT6o8EvGcgjNqjlZx7 +NUNf8MfLDByqKF6+wRbHv1GKjn3/Vijd45Fv8riyRYROiFanvbV6jIfBkv8PZbXg +2VDWsYsgp8NAvMxK+iV8cO+Ck3lBI2GOPZbCEqpPVTYbLUz6sczAlCXwQoPzDIZY +wYa3eR/gYLY1gP2iEVHORag3bLPap9ZX5E8DZkzTNTjovvLk8KaCmfcaUMJsBtDd +ApcUitz10cnRyZc1sX3gE1f3DpzQM6t9C5sOVyRhDcSrKqqwb9m0Ss04XAS9FsqM +P3UWYQyqDXSxlUAYaX892u8mV1hxnt2gjb22RloXMM6TovM3sSrJS0wH+l1nznd6 +aFXftS/G4ZVIVZ/LfT1is4StoyPWZCwwwly1z8qJQ/zhip5NgZTxQw4mi7ww35DY +PdAQOCoajfSvFjqslQ/cPRi/MRCu079heVb5fQnnzVtnpFQRAgMBAAGjYzBhMB0G +A1UdDgQWBBRTVTPyS+vQUbHBeJrBKDF77+rtSTAfBgNVHSMEGDAWgBRTVTPyS+vQ +UbHBeJrBKDF77+rtSTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAN +BgkqhkiG9w0BAQsFAAOCAgEAPx/IaK94n02wPxpnYTy+LVLIxwdq/kawNd6IbiMz +L87zmNMDmHcGbfoRCj8OkhuggX9Lx1/CkhpXimuYsZOFQi5blr/u+v4mIbsgbmi9 +7j+cUHDP0zLycvSvxKHty51LwmaX9a4wkJl5zBU4O1sd/H9tWcEmwJ39ltKoBKBx +c94Zc3iMm5ytRWGj+0rKzLDAXEWpoZ5bE5PLJauA6UDCxDLfs3FwhbS7uDggxYvf +jySF5FCNET94oJ+m8s7VeHvoa8iPGKvXrIqdd7XDHnqJJlVKr7m9S0fMbyEB8ci2 +RtOXDt93ifY1uhoEtEykn4dqBSp8ezvNMnwoXdYPDvTd9uCAFeWFLVreBAWxd25h +PsBTkZA5hpa/rA+mKv6Af4VBViYr8cz4dZCsFChuioVebe9ighrfjB//qKepFjPF +CyjzKN1u0JKm/2x/ORqxkTONG8p3uDwoIOyimUcTtTMv42bfYD88RKakqSFXE9G+ +Z0LlaKABqfjK49o/tsAp+c5LoNlYllKhnetO3QAdraHwdmC36BhoghzR1jpX751A +cZn2VH3Q4XKyp01cJNCJIrua+A+bx6zh3RyW6zIIkbRCbET+UD+4mr8WIcSE3mtR +ZVlnhUDO4z9//WKMVzwS9Rh8/kuszrGFI1KQozXCHLrce3YP6RYZfOed79LXaRwX +dYY= +-----END CERTIFICATE----- diff --git a/solution/integration/smo/oam/sdnc-web/cert.pem b/solution/integration/smo/oam/sdnc-web/cert.pem new file mode 100644 index 0000000..1195a12 --- /dev/null +++ b/solution/integration/smo/oam/sdnc-web/cert.pem @@ -0,0 +1,102 @@ +Bag Attributes + friendlyName: sdnc@sdnc.onap.org + localKeyID: 54 69 6D 65 20 31 36 31 31 36 38 33 32 39 38 35 32 32 +Key Attributes: +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIk4s7xBaGXdgCAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECI7qjnyFxa3mBIIEyHgvXzCmhOT/ +atHsneicZqaGXxz57z1mPosvGwf2w6WerxOyW+cFejNepgMH+c5MQAfTuTD0H5g3 +SoyC9TKfHBld439sKO3hnDBROsypugO2uP4ownGiKQxOdwHNCOS8nC1EbUYC6nHR +B5QtRpDHZzB2t9dd6+RU1PuPUFRxjIPZsCM1DdKKhMHQHr8WDSbi170XfzC6O2Ko +23tgDq9cQYTqmgFedjyWpEmxfcibaujGOZ4VQej+tn60A03cXHG05tN/XvDCbQty +9bw1kiS8e+qmdUhkEIhR2aY0Z9sCUOLwJPDg/1vE0ZwK/bRGRD432PD+dmSLFV+v +m2m/ec8IQer8hCleI6GBaFI28QZyS2jznbzS7b/hU+nyxkZXejAymU1OBcNV4H8M +qf5ITWs+Ma5fc/8X90MlJacmBo3JuusTvDImLFP+5Nn5Yo3cnDeiAyMo0vFuywrv +bATYAncPlzksb6py3D5iXmLxREgLI14/TdZLhcYXBHw76oPz+/CH0A2P/HICPIjr +zF8U6zNI4bIguBTfVmm6YLjzOkVkKx4e/0fJiQO1yhzIsghhByIMg1uPcm0olNQz +r+YRPKTqFCPRxyGgPMleN56qeLhN8Q1WyJzIJoVVpDFc+4Stbv71C/po6/6A3v4r +hGUPCSsj8wJN+ozdamDWpeyRVCwXmmKwJU96pbnhdH/l6CPjmniAuKLzOMLJH1AD +FJEm1Frpz40BDC2U/165+nlfcHZfePWVPpNuqWzUfywqu8ORS/pYhapFoLLafQIn +22KhnPnbNXclIzuI0wiKjoNAfzJM0S9hysdojK/bptaZXUFeBEe41A8exuOjOxRh +pJqqgq2cRx6cmnAy0dr54+GoZr3haQCqTk814cxumOHqQdWllblA1D9b5Wd+8T5+ +tYdzYatsvjeY/VDH5czAbUhgBHGO3Vkxm49QemcopNDeCZ7RXmSwl2X6HLfCwnfH +9zsdNrIMfSTdRk9H4iHTyFRyoPViX6wYxlD7B9hJWggEyDVg9RvJImOSKyWk+NKd +WmfxaywgUJkxsJeEBCso8V690lm//oWrc17qWEd29h/9J0MPNa2zXJyG1Yq1RohZ +JW3IcnE8gCoyHVjxBCVjKPA6dXtfDNfmCDyEG+GgPglQUj9TBIRGmn9e067M6dB9 +vhnK12SBQNTyoH5vWSbP2u5wk6jV5QKYyqMbNHAD1uvsBbWy4FpoI+epp2Y3XcAr +kgBzopKSaCbj1thxxUHsMYBspVDR+D0SR4fsHhj+Y3jmr37s3q1NOSkWUMcMa7Hi +zaozRSo8hYUwP5RHpPcNCTcK0dhFPAWXyGPtP7IribGQDhUAdde/s4yPuSLa28zy +uTKWU5vSlaE+9WRSKvbA8HdKTPv45dV/qUCHITvPOdsqkWJ3qhNQMrrD9Mx17oj/ +zGZTcRGQG62dfYUR9v2rGE6Gj7MzaE1SrQgYqtCzWfJ9e3fBqOlko5jtZ5Kz86DU +ZFISrkb1sATngzWFtvyNgHFx4fUsYDJbc8XlB47H5Byyj/6SypS6dMpwqpNezn8s +xQi3yUfpg7GQzTFKdwmqK/KVeh0KZF/0FM+ZCUPh6IaRDcp8+Hm7H72ZD4vPxs4s +8bvLx9bxfiI+/6Om51IQrQ== +-----END ENCRYPTED PRIVATE KEY----- +Bag Attributes + friendlyName: sdnc@sdnc.onap.org + localKeyID: 54 69 6D 65 20 31 36 31 31 36 38 33 32 39 38 35 32 32 +subject=CN = sdnc, OU = sdnc@sdnc.onap.org:DEV, OU = OSAAF, O = ONAP, C = US + +issuer=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9 + +-----BEGIN CERTIFICATE----- +MIIE6zCCA9OgAwIBAgIJALyx+8HFJuYTMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNV +BAYTAlVTMQ0wCwYDVQQKDARPTkFQMQ4wDAYDVQQLDAVPU0FBRjEZMBcGA1UEAwwQ +aW50ZXJtZWRpYXRlQ0FfOTAeFw0yMTAxMjYxNzQ4MThaFw0yMjAxMjYxNzQ4MTha +MFwxDTALBgNVBAMMBHNkbmMxHzAdBgNVBAsMFnNkbmNAc2RuYy5vbmFwLm9yZzpE +RVYxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALQtwrW3Eiru18BADUiBIbEU +sruiLu63h6jDprLqrxGt57d5MSpxaRoOPoWDPE/Z6LvMwTGfiQIPsFnZ2H3YtDsI +/p1fOFAHxCUl5Cs4HnYjJUkDs2U7dXUYZR8enNPZRfFZNUOajxERUgyE/0g+yHS1 +AlysMInFDblmNEYgQoNiN996FpBamHivCDXw612bBkkZQOTeKJaCZ0DPGIYGAJtf +Q1kIL7Y1D3c3C0VD39homtxqIb21rje63YVISprbfKX0RxijkWw0wXjaRDwxPGwH +TrDHgsrPH/zv9Hak6cJkTw5e7VBHHlL1sHYgPSDLd/8PFGkmD4a/N/IKLy/14KMC +AwEAAaOCAcMwggG/MAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgXgMCAGA1UdJQEB +/wQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBUBgNVHSMETTBLgBSB95lbELnIjN7z +Ul7qTmmgQz6s3aEwpC4wLDEOMAwGA1UECwwFT1NBQUYxDTALBgNVBAoMBE9OQVAx +CzAJBgNVBAYTAlVTggEHMB0GA1UdDgQWBBRUhHQPlauGoN9fiGiB7WYr+oIHJDCC +AQkGA1UdEQSCAQAwgf2BH21hcmsuZC5tYW5hZ2VyQHBlb3BsZS5vc2FhZi5jb22C +BHNkbmOCG2MxLnZtMS5zZG5jLnNpbXBsZWRlbW8ub25hcIIbYzIudm0xLnNkbmMu +c2ltcGxlZGVtby5vbmFwghtjMy52bTEuc2RuYy5zaW1wbGVkZW1vLm9uYXCCG2M0 +LnZtMS5zZG5jLnNpbXBsZWRlbW8ub25hcIIJb25hcC1zZG5jgg5vbmFwLXNkbmMu +b25hcIIcc2RuYy5hcGkuc2ltcGxlZGVtby5vbmFwLm9yZ4IJc2RuYy5vbmFwghx2 +bTEuc2RuYy5zaW1wbGVkZW1vLm9uYXAub3JnMA0GCSqGSIb3DQEBCwUAA4IBAQAg +7fybHysjWyKejSfPnodYuLfQoCIaXe5C4JbwLGKweAost5E6ud2rscN/c5UYNPs/ +IskfnMxULLzJpEXdUHwLQaLJj0fQQBRHq23s8P7Emu44ZeEzxAQfI+4pKRzTYxag +4dIitf91nhUq5SQI/pcki+/ElkwfeKHYQLBDU8ygG/gZKh1UHxIjfva7v/ENqL2h +H8UDXsLhOx/guaJzH2CRQdKMminsdtnNgSRRPzWRe4EMc2ah6G6E4B/Za/n7Rhq5 +r6jpvM/XIxPCY4ci5jJIbvdahS4I54kMaLRTSl4gT8+n8ie/GzhZlXX+1MR8HCZc +8SWDYxmc8MkJ20iekiSc +-----END CERTIFICATE----- +Bag Attributes + friendlyName: CN=intermediateCA_9,OU=OSAAF,O=ONAP,C=US +subject=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9 + +issuer=OU = OSAAF, O = ONAP, C = US + +-----BEGIN CERTIFICATE----- +MIIEdTCCAl2gAwIBAgIBBzANBgkqhkiG9w0BAQsFADAsMQ4wDAYDVQQLDAVPU0FB +RjENMAsGA1UECgwET05BUDELMAkGA1UEBhMCVVMwHhcNMTgwODE3MTg1MTM3WhcN +MjMwODE3MTg1MTM3WjBHMQswCQYDVQQGEwJVUzENMAsGA1UECgwET05BUDEOMAwG +A1UECwwFT1NBQUYxGTAXBgNVBAMMEGludGVybWVkaWF0ZUNBXzkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCv0HHUkba3uNtNI3jPKimUcd6RNwmhSCJL +neMWpnjqp5/A+HCKyNsEaT4y177hNLmCm/aMm1u2JIfikc+8wEqLCSBBPz+P0h+d +o+sZ7U+4oeQizdYYpEdzHJ2SieHHa8vtu80rU3nO2NEIkuYC20HcKSEtl8fFKsk3 +nqlhY+tGfYJPTXcDOQAO40BTcgat3C3uIJHkWJJ4RivunE4LEuRv9QyKgAw7rkJV +v+f7guqpZlXy6dzAkuU7XULWcgo55MkZlssoiErMvEZJad5aWKvRY3g7qUjaQ6wO +15wOAUoRBW96eeZZbytgn8kybcBy++Ue49gPtgm1MF/KlAsp0MD5AgMBAAGjgYYw +gYMwHQYDVR0OBBYEFIH3mVsQuciM3vNSXupOaaBDPqzdMB8GA1UdIwQYMBaAFFNV +M/JL69BRscF4msEoMXvv6u1JMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B +AQsFAAOCAgEADxNymiCNr2e37iLReoaxKmZvwox0cTiNAaj7iafRzmwIoY3VXO8Q +ix5IYcp4FaQ7fV1jyp/AmaSnyHf6Osl0sx8PxsQkO7ALttxKUrjfbvNSVUA2C/vl +u5m7UVJLIUtFDZBWanzUSmkTsYLHpiANFQKd2c/cU1qXcyzgJVFEFVyyHNkF7Is+ ++pjG9M1hwQHOoTnEuU013P7X1mHek+RXEfhJWwe7UsZnBKZaZKbQZu7hEtqKWYp/ +QsHgnjoLYXsh0WD5rz/mBxdTdDLGpFqWDzDqb8rsYnqBzoowvsasV8X8OSkov0Ht +8Yka0ckFH9yf8j1Cwmbl6ttuonOhky3N/gwLEozuhy7TPcZGVyzevF70kXy7g1CX +kpFGJyEHXoprlNi8FR4I+NFzbDe6a2cFow1JN19AJ9Z5Rk5m7M0mQPaQ4RcikjB3 +aoLsASCJTm1OpOFHfxEKiBW4Lsp3Uc5/Rb9ZNbfLrwqWZRM7buW1e3ekLqntgbky +uKKISHqVJuw/vXHl1jNibEo9+JuQ88VNuAcm7WpGUogeCa2iAlPTckPZei+MwZ8w +tpvxTyYlZEC8DWzY1VC29+W2N5cvh01e2E3Ql08W1zL63dqrgdEZ3VWjzooYi4ep +BmMXTvouW+Flyvcw/0oTcfN0biDIt0mCkZ5CQVjfGL9DTOYteR5hw+k= +-----END CERTIFICATE----- diff --git a/solution/integration/smo/oam/sdnc-web/key.pem b/solution/integration/smo/oam/sdnc-web/key.pem new file mode 100644 index 0000000..04bc849 --- /dev/null +++ b/solution/integration/smo/oam/sdnc-web/key.pem @@ -0,0 +1,29 @@ +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC0LcK1txIq7tfA +QA1IgSGxFLK7oi7ut4eow6ay6q8Rree3eTEqcWkaDj6FgzxP2ei7zMExn4kCD7BZ +2dh92LQ7CP6dXzhQB8QlJeQrOB52IyVJA7NlO3V1GGUfHpzT2UXxWTVDmo8REVIM +hP9IPsh0tQJcrDCJxQ25ZjRGIEKDYjffehaQWph4rwg18OtdmwZJGUDk3iiWgmdA +zxiGBgCbX0NZCC+2NQ93NwtFQ9/YaJrcaiG9ta43ut2FSEqa23yl9EcYo5FsNMF4 +2kQ8MTxsB06wx4LKzx/87/R2pOnCZE8OXu1QRx5S9bB2ID0gy3f/DxRpJg+Gvzfy +Ci8v9eCjAgMBAAECggEAbB+J2MIjhOAPWK8XSYs0TK+/EhohT9+S6RN/1Z4/sLxL +cS6o8m9cQuaJXlWCu+hoYUpeJQk3jqUbjs/LurlwbnzXTlj10hDXA/PZGJZ0sTAm +D8rIvNcRhVM+W45jTj30WwDNleQKNpPOSPUGvLPwVxjIchRijEpUEg3jELILOAuW +ebloKLqc5SDAPKIpepZO7bz4L/dVlQSEBp3OTzyfeecbBNS2Vfw0K+I5BqGJAssZ +Dq+ixSHRj6mdvm7tf5e14j65W8VKvUoHbktp9z2OBCItySV4g1dqrfM7T9SqsosH +cbwR5dIieiFnhdg94rfpzH2QTCBt5MGUpCcv+CbQAQKBgQDkenCAImG1jAjzQNxb +7LXLJeIqJC2E3290hEYge2Bi+1/WmV222AAwNUEPQfKa7qUJRLpX8a4p+9kTaZos +93szyYEyp4vf93GDHvQPmKMJDCbbxa94txd5dnrtYTN+MCPjpwr+75++JRUUwcNr +k3mkzM87zhSBkyYcGiCsza4gQQKBgQDJ4enp8Zly3GqufbWJNpKut6e9hC6f4qWi +4qRUBmjnogm0HiGmn83n9B6SI6OnaRy/dXgPBogZDeETyzGu78nArDK+cy8wSy0H +aPuApqGJzsuAl6YWudYt4ooBcJL99XgTGxFAb2q04JKxh18V6DRfj7pY2uhZongI +OdcMSE2H4wKBgQCUzNEcAkhUbmEd264oCB/VsFR9UZZ7pPD3l3X8jZ2WmVQvdS69 +eCuXOfenMjIIiUfeo24g/HuLSER2Ch6pDnykm6WTEd9c+9Bnru8QgT4dFFbyZusC +2WtmZa1lkBpzInMdPptAsVr+ATSbkh3tn9xnYiPNNUfRo738K2AAauvugQKBgQCd +dzbqoOXdr4sOm0LzybtTyDBwJB/x2ej0Se9/EpjUw5DqCu6YduE2YTVPK7lEpTol +JE0G+0NAt5CtzbntB1/Ihwf1gQZ3lsuCkiJJ0K8DPGeC38ZOx5kFpUObp+EfcU29 +KUmlhsImX1xMWJiUD9B6ETN6hxTghVc2o1bXX7YJnQKBgQCGiRnjCEmKd8hefkS8 +ub9F4kdOzXmG4XhK+oZWVGPXIGfnoxm6IbWcjSArA/m8TLfJSHPKujnLOnOkffpi +7+PWzTHn5BFDGUb8z3mxwJV8e9szoDkljoiUwYU/S8eatAm6lyJv1gp2wmDI9DfT +86BefCEvGk3EzAo3L6hhHdICzA== +-----END PRIVATE KEY----- + diff --git a/solution/integration/smo/sdnr/certs/certs.properties b/solution/integration/smo/oam/sdnr/certs/certs.properties similarity index 100% rename from solution/integration/smo/sdnr/certs/certs.properties rename to solution/integration/smo/oam/sdnr/certs/certs.properties diff --git a/solution/integration/smo/sdnr/certs/keys0.zip b/solution/integration/smo/oam/sdnr/certs/keys0.zip similarity index 100% rename from solution/integration/smo/sdnr/certs/keys0.zip rename to solution/integration/smo/oam/sdnr/certs/keys0.zip diff --git a/solution/integration/smo/oam/sdnr/devicemanager.properties b/solution/integration/smo/oam/sdnr/devicemanager.properties new file mode 100644 index 0000000..152e2a6 --- /dev/null +++ b/solution/integration/smo/oam/sdnr/devicemanager.properties @@ -0,0 +1,52 @@ +[aai] +aaiPropertiesFile=null +aaiUrl=off +aaiHeaders=["X-TransactionId: 9999"] +aaiDeleteOnMountpointRemove=false +aaiTrustAllCerts=false +aaiApiVersion=aai/v13 +aaiClientConnectionTimeout=30000 +aaiApplicationId=SDNR +aaiReadTimeout=60000 +aaiUserCredentials= +aaiPcks12ClientCertFile= +aaiPcks12ClientCertPassphrase= + +[devicemonitor] +SeverityconnectionLossOAM=Major +SeverityconnectionLossMediator=Major +SeverityconnectionLossNeOAM=Major + +[dmonf] +pollAlarms=false + +[toggleAlarmFilter] +taEnabled=true +taDelay=3000 + +[housekeeping] +hkEnabled=false + +[dcae] +dcaeUrl=off +dcaeUserCredentials=admin:admin +dcaeHeartbeatPeriodSeconds=120 + +[pm] +pmEnabled=true + +[VESCollector] +VES_COLLECTOR_ENABLED=true +VES_COLLECTOR_TLS_ENABLED=true +VES_COLLECTOR_TRUST_ALL_CERTS=true +VES_COLLECTOR_USERNAME=sample1 +VES_COLLECTOR_PASSWORD=sample1 +VES_COLLECTOR_IP=ves-collector +VES_COLLECTOR_PORT=8443 +VES_COLLECTOR_VERSION=v7 +REPORTING_ENTITY_NAME=ONAP SDN-R +EVENTLOG_MSG_DETAIL=LONG + +[dmonf14] +useDomApi=${SDNR_ONF14_USEDOMAPI} + diff --git a/solution/integration/smo/sdnr/mountpoint-registrar.properties b/solution/integration/smo/oam/sdnr/mountpoint-registrar.properties similarity index 100% rename from solution/integration/smo/sdnr/mountpoint-registrar.properties rename to solution/integration/smo/oam/sdnr/mountpoint-registrar.properties diff --git a/solution/integration/smo/oam/sdnr/oauth-provider.config.json b/solution/integration/smo/oam/sdnr/oauth-provider.config.json new file mode 100644 index 0000000..9f608f5 --- /dev/null +++ b/solution/integration/smo/oam/sdnr/oauth-provider.config.json @@ -0,0 +1,23 @@ +{ + "tokenSecret": "my-secret", + "tokenIssuer": "ONAP-SDNC", + "publicUrl": "${SDNC_WEB_URL}", + "redirectUri": "/odlux/index.html#/oauth?token=", + "supportOdlUsers": "true", + "providers": [ + { + "id": "identity", + "type": "KEYCLOAK", + "url": "http://identity:8081", + "clientId": "odlux.app", + "secret": "2a64fdca-c205-4b52-9f58-195ccc142ddb", + "scope": "openid", + "title": "ONAP-IDENTITY", + "roleMapping": { + "administration": "admin" + }, + "realmName": "onap", + "trustAll": "true" + } + ] +} diff --git a/solution/integration/smo/oam/sdnr/org.apache.karaf.features.cfg b/solution/integration/smo/oam/sdnr/org.apache.karaf.features.cfg new file mode 100644 index 0000000..c48f348 --- /dev/null +++ b/solution/integration/smo/oam/sdnr/org.apache.karaf.features.cfg @@ -0,0 +1,73 @@ +################################################################################ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# +################################################################################ + +# +# Comma separated list of features repositories to register by default +# +featuresRepositories = file:${karaf.etc}/db8aa871-2190-4400-922c-6055a7c56102.xml, mvn:org.onap.ccsdk.sli.core/ccsdk-sli-core-all/1.2.2/xml/features, mvn:org.onap.ccsdk.sli.adaptors/ccsdk-sli-adaptors-all/1.2.2/xml/features, mvn:org.onap.ccsdk.sli.northbound/ccsdk-sli-northbound-all/1.2.2/xml/features, mvn:org.onap.ccsdk.sli.plugins/ccsdk-sli-plugins-all/1.2.2/xml/features, mvn:org.onap.ccsdk.features/ccsdk-features-all/1.1.4/xml/features, mvn:org.onap.ccsdk.oran/a1-adapter-northbound/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.northbound/sdnr-northbound-all/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.wt/sdnr-wt-feature-aggregator/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.wt/sdnr-wt-feature-aggregator-oauth/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.wt/sdnr-wt-feature-aggregator-devicemanager/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.wt/sdnr-wt-feature-aggregator-devicemanager-base/1.1.4/xml/features ,mvn:org.onap.sdnc.northbound/sdnc-northbound-all/2.1.3/xml/features + +# +# Comma separated list of features to install at startup +# +featuresBoot = 8a02945f-f980-4626-8ccc-87334d9e1d06,odl-restconf-all,odl-netconf-topology,odl-mdsal-all,odl-mdsal-apidocs, odl-daexim-all, odl-restconf-nb-rfc8040, odl-netconf-callhome-ssh, sdnr-wt-feature-aggregator-devicemanager-base,sdnr-wt-feature-aggregator-devicemanager,sdnr-wt-helpserver-feature,sdnr-wt-odlux-core-feature,sdnr-wt-odlux-apps-feature + +# +# Resource repositories (OBR) that the features resolver can use +# to resolve requirements/capabilities +# +# The format of the resourceRepositories is +# resourceRepositories=[xml:url|json:url],... +# for Instance: +# +#resourceRepositories=xml:http://host/path/to/index.xml +# or +#resourceRepositories=json:http://host/path/to/index.json +# + +# +# Defines if the boot features are started in asynchronous mode (in a dedicated thread) +# +featuresBootAsynchronous=false + +# +# Service requirements enforcement +# +# By default, the feature resolver checks the service requirements/capabilities of +# bundles for new features (xml schema >= 1.3.0) in order to automatically installs +# the required bundles. +# The following flag can have those values: +# - disable: service requirements are completely ignored +# - default: service requirements are ignored for old features +# - enforce: service requirements are always verified +# +#serviceRequirements=default + +# +# Store cfg file for config element in feature +# +#configCfgStore=true + +# +# Configuration of features processing mechanism (overrides, blacklisting, modification of features) +# XML file defines instructions related to features processing +# versions.properties may declare properties to resolve placeholders in XML file +# both files are relative to ${karaf.etc} +# +#featureProcessing=org.apache.karaf.features.xml +#featureProcessingVersions=versions.properties diff --git a/solution/integration/smo/vescollector/collector.properties b/solution/integration/smo/oam/ves-collector/collector.properties similarity index 100% rename from solution/integration/smo/vescollector/collector.properties rename to solution/integration/smo/oam/ves-collector/collector.properties diff --git a/solution/integration/tmux-logging.py b/solution/integration/tmux-logging.py new file mode 100755 index 0000000..770ea7f --- /dev/null +++ b/solution/integration/tmux-logging.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +################################################################################ +# Copyright 2021 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. +# + +from libtmux import Pane, Server, Window, exc +from libtmux.common import has_gte_version + +def createLoggingWindow(): + logging = session.new_window(attach=False, window_name="logging") + sdnr = logging.list_panes()[0] + sdnr.send_keys('echo "sdnr"', enter=True) + sdnr.send_keys('docker exec -it sdnr tail -f /opt/opendaylight/data/log/karaf.log', enter=True) + + ntsim = logging.split_window(attach=False, vertical=True) + ntsim.send_keys('echo "ntsim"', enter=True) + ntsim.send_keys('docker exec -it ntsim-ng-o-du-1122 tail -f /opt/dev/ntsim-ng/log/log.txt', enter=True) + + ves = logging.split_window(attach=False, vertical=False) + ves.send_keys('echo "ves"', enter=True) + ves.send_keys('docker logs -f ves-collector', enter=True) + + env = ntsim.split_window(attach=False, vertical=False) + env.send_keys('htop', enter=True) + +# main +server = Server() +session = server.find_where({ "session_name": "integration" }) + +workspace = session.select_window("workspace") +pane = workspace.list_panes()[0] +# pane.send_keys('clear', enter=True) +pane.send_keys('cat README.md', enter=True) +pane.send_keys('docker ps -a', enter=True) + +# create logging window, if needed +logging = session.find_where({'window_name':'logging'}) +if logging is None: + createLoggingWindow()