Update deployment option "integration" 38/6238/2
authordemx8as6 <martin.skorupski@highstreet-technologies.com>
Sun, 6 Jun 2021 14:05:58 +0000 (16:05 +0200)
committerdemx8as6 <martin.skorupski@highstreet-technologies.com>
Mon, 7 Jun 2021 13:48:42 +0000 (15:48 +0200)
- The entire integration folder was refactured.
- Please follow the instruction in README.md

Issue-Id: OAM-217
Change-Id: I7822fd928ee759ff4738f9673a4320e2409772e7
Signed-off-by: demx8as6 <martin.skorupski@highstreet-technologies.com>
59 files changed:
solution/integration/README.md
solution/integration/docs/nstim-ng-connected-after-ves-pnf-registration-in-odlux.png [new file with mode: 0644]
solution/integration/docs/tmux-logging.png [new file with mode: 0644]
solution/integration/docs/ves-fault-in-odlux.png [new file with mode: 0644]
solution/integration/network/.env [new file with mode: 0644]
solution/integration/network/config.py [new file with mode: 0644]
solution/integration/network/docker-compose.yml [new file with mode: 0755]
solution/integration/network/ntsim-ng-o-du/config.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-du/event-settings.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-operational.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-running.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/event-settings.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/config.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-operational.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-running.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-operational.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-running.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/nts-network-function-running.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/config.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-operational.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-running.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-operational.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-running.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/config.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-operational.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-running.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-operational.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-running.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-topology-server/config.json [new file with mode: 0644]
solution/integration/network/ntsim-ng-topology-server/tapi-common-operational.xml [new file with mode: 0644]
solution/integration/network/ntsim-ng-topology-server/tapi-common-running.xml [new file with mode: 0644]
solution/integration/smo/.env [deleted file]
solution/integration/smo/README.md [deleted file]
solution/integration/smo/common/.env [new file with mode: 0644]
solution/integration/smo/common/dmaap/MsgRtrApi.properties [moved from solution/integration/smo/dmaap/MsgRtrApi.properties with 97% similarity]
solution/integration/smo/common/dmaap/cadi.properties [moved from solution/integration/smo/dmaap/cadi.properties with 100% similarity]
solution/integration/smo/common/dmaap/logback.xml [moved from solution/integration/smo/dmaap/logback.xml with 99% similarity]
solution/integration/smo/common/docker-compose.yml [moved from solution/integration/smo/docker-compose.yml with 56% similarity]
solution/integration/smo/common/docker/README.md [new file with mode: 0644]
solution/integration/smo/common/docker/daemon.json [new file with mode: 0644]
solution/integration/smo/common/identity/authentication.json [new file with mode: 0644]
solution/integration/smo/common/identity/config.py [new file with mode: 0644]
solution/integration/smo/common/identity/o-ran-sc-realm.json [new file with mode: 0644]
solution/integration/smo/common/identity/standalone.xml [new file with mode: 0644]
solution/integration/smo/common/kafka/zk_client_jaas.conf [moved from solution/integration/smo/kafka/zk_client_jaas.conf with 100% similarity]
solution/integration/smo/common/zookeeper/zk_server_jaas.conf [moved from solution/integration/smo/zk/zk_server_jaas.conf with 100% similarity]
solution/integration/smo/oam/.env [new file with mode: 0644]
solution/integration/smo/oam/docker-compose.yml [new file with mode: 0755]
solution/integration/smo/oam/sdnc-web/cacert.pem [new file with mode: 0644]
solution/integration/smo/oam/sdnc-web/cert.pem [new file with mode: 0644]
solution/integration/smo/oam/sdnc-web/key.pem [new file with mode: 0644]
solution/integration/smo/oam/sdnr/certs/certs.properties [moved from solution/integration/smo/sdnr/certs/certs.properties with 100% similarity]
solution/integration/smo/oam/sdnr/certs/keys0.zip [moved from solution/integration/smo/sdnr/certs/keys0.zip with 100% similarity]
solution/integration/smo/oam/sdnr/devicemanager.properties [new file with mode: 0644]
solution/integration/smo/oam/sdnr/mountpoint-registrar.properties [moved from solution/integration/smo/sdnr/mountpoint-registrar.properties with 100% similarity]
solution/integration/smo/oam/sdnr/oauth-provider.config.json [new file with mode: 0644]
solution/integration/smo/oam/sdnr/org.apache.karaf.features.cfg [new file with mode: 0644]
solution/integration/smo/oam/ves-collector/collector.properties [moved from solution/integration/smo/vescollector/collector.properties with 100% similarity]
solution/integration/tmux-logging.py [new file with mode: 0755]

index b58cbcc..0c39c32 100644 (file)
@@ -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.
+
+* <your-system>: is the hostname of the system, where the browser is started
+
+* <deployment-system-ipv4>: is the IP address of the system where the solution will be deployed
+
+For development purposes <your-system> and <deployment-system> may reference the same system.
+
+```
+$ cat /etc/hosts
+127.0.0.1                    localhost
+127.0.1.1                    <your-system>
+<deployment-system-ipv4>   sdnc-web <your-system>
+<deployment-system-ipv4>   identity <your-system>
+```
+
+## 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
+    │   │
+    │   └── <config-folders>
+    └── 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 (file)
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 (file)
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 (file)
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 (file)
index 0000000..4929cc9
--- /dev/null
@@ -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 (file)
index 0000000..f1fd0f3
--- /dev/null
@@ -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 (executable)
index 0000000..a07b98d
--- /dev/null
@@ -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 (file)
index 0000000..299a6cf
--- /dev/null
@@ -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" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>$$uint16_counter$$</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+        "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 (file)
index 0000000..108b10a
--- /dev/null
@@ -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 (file)
index 0000000..c2d132a
--- /dev/null
@@ -0,0 +1,20 @@
+<network-function xmlns="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">
+    <du-to-ru-connection>
+      <name>highstreet-O-RU-11221</name>
+      <administrative-state>LOCKED</administrative-state>
+      <operational-state>ENABLED</operational-state>
+      <status>disconnected</status>
+    </du-to-ru-connection>
+    <du-to-ru-connection>
+      <name>highstreet-O-RU-11222</name>
+      <administrative-state>UNLOCKED</administrative-state>
+      <operational-state>ENABLED</operational-state>
+      <status>connected</status>
+    </du-to-ru-connection>
+    <du-to-ru-connection>
+      <name>highstreet-O-RU-11223</name>
+      <administrative-state>LOCKED</administrative-state>
+      <operational-state>DISABLED</operational-state>
+      <status>unable-to-connect</status>
+    </du-to-ru-connection>
+  </network-function>
\ 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 (file)
index 0000000..d1d7e74
--- /dev/null
@@ -0,0 +1,14 @@
+<network-function xmlns="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">
+    <du-to-ru-connection>
+      <name>highstreet-O-RU-11221</name>
+      <administrative-state>UNLOCKED</administrative-state>
+    </du-to-ru-connection>
+    <du-to-ru-connection>
+      <name>highstreet-O-RU-11222</name>
+      <administrative-state>LOCKED</administrative-state>
+    </du-to-ru-connection>
+    <du-to-ru-connection>
+      <name>highstreet-O-RU-11223</name>
+      <administrative-state>LOCKED</administrative-state>
+    </du-to-ru-connection>
+  </network-function>
\ 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 (file)
index 0000000..ff875de
--- /dev/null
@@ -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 (file)
index 0000000..0374876
--- /dev/null
@@ -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" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>%%fault-id%%</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+        "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 (file)
index 0000000..18c83c9
--- /dev/null
@@ -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 (file)
index 0000000..ab757fa
--- /dev/null
@@ -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 (file)
index 0000000..75f0eec
--- /dev/null
@@ -0,0 +1,151 @@
+  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+    <interface>
+      <name>09a95e08-5b53-4734-815f-a9c12300fc62</name>
+      <description>Simulated interface for O-RU</description>
+      <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+      <enabled>true</enabled>
+      <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+      <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>false</enabled>
+        <forwarding>false</forwarding>
+        <mtu>42783</mtu>
+        <address>
+          <ip>6.122.172.49</ip>
+          <prefix-length>14</prefix-length>
+          <origin>static</origin>
+        </address>
+        <address>
+          <ip>206.35.59.57</ip>
+          <netmask>199.41.255.188</netmask>
+          <origin>random</origin>
+        </address>
+        <neighbor>
+          <ip>48.159.72.129</ip>
+          <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+          <origin>other</origin>
+        </neighbor>
+        <neighbor>
+          <ip>187.230.45.63</ip>
+          <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+          <origin>dynamic</origin>
+        </neighbor>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>38</u-plane-marking>
+          <c-plane-marking>16</c-plane-marking>
+          <s-plane-marking>62</s-plane-marking>
+          <other-marking>27</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+            <enhanced-marking>21</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>2zF55KBup</up-marking-name>
+            <enhanced-marking>5</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv4>
+      <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>true</enabled>
+        <forwarding>true</forwarding>
+        <mtu>1163652863</mtu>
+        <address>
+          <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+          <prefix-length>124</prefix-length>
+          <origin>other</origin>
+          <status>tentative</status>
+        </address>
+        <address>
+          <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+          <prefix-length>65</prefix-length>
+          <origin>link-layer</origin>
+          <status>preferred</status>
+        </address>
+        <neighbor>
+          <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+          <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+          <origin>other</origin>
+          <is-router/>
+          <state>probe</state>
+        </neighbor>
+        <neighbor>
+          <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+          <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+          <origin>other</origin>
+          <state>incomplete</state>
+        </neighbor>
+        <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+        <autoconf>
+          <create-global-addresses>true</create-global-addresses>
+          <create-temporary-addresses>true</create-temporary-addresses>
+          <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+          <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+        </autoconf>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>29</u-plane-marking>
+          <c-plane-marking>50</c-plane-marking>
+          <s-plane-marking>14</s-plane-marking>
+          <other-marking>61</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+            <enhanced-marking>18</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+            <enhanced-marking>29</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv6>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+      <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+      <port-reference xmlns="urn:o-ran:interfaces:1.0">
+        <port-number>113</port-number>
+      </port-reference>
+      <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+      <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+      <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+        <u-plane-marking>3</u-plane-marking>
+        <c-plane-marking>0</c-plane-marking>
+        <m-plane-marking>1</m-plane-marking>
+        <s-plane-marking>6</s-plane-marking>
+        <other-marking>4</other-marking>
+        <enhanced-uplane-markings>
+          <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+          <enhanced-marking>5</enhanced-marking>
+        </enhanced-uplane-markings>
+        <enhanced-uplane-markings>
+          <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+          <enhanced-marking>2</enhanced-marking>
+        </enhanced-uplane-markings>
+      </class-of-service>
+      <admin-status>up</admin-status>
+      <oper-status>unknown</oper-status>
+      <last-change>2018-12-04T01:22:44Z</last-change>
+      <if-index>1399123220</if-index>
+      <phys-address>fc:07:1e:ec:24:a3</phys-address>
+      <higher-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</higher-layer-if>
+      <lower-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</lower-layer-if>
+      <speed>2897952377425309696</speed>
+      <statistics>
+        <discontinuity-time>2037-04-15T16:07:29Z</discontinuity-time>
+        <in-octets>2571268368646403584</in-octets>
+        <in-unicast-pkts>6267618126971935744</in-unicast-pkts>
+        <in-broadcast-pkts>1109994561130658944</in-broadcast-pkts>
+        <in-multicast-pkts>3315305959068576256</in-multicast-pkts>
+        <in-discards>1267048002</in-discards>
+        <in-errors>2454029092</in-errors>
+        <in-unknown-protos>603209482</in-unknown-protos>
+        <out-octets>1059514199864528128</out-octets>
+        <out-unicast-pkts>6657904184753078272</out-unicast-pkts>
+        <out-broadcast-pkts>5105130509884859392</out-broadcast-pkts>
+        <out-multicast-pkts>2014558074734005248</out-multicast-pkts>
+        <out-discards>2053161590</out-discards>
+        <out-errors>1475901304</out-errors>
+      </statistics>
+      <last-cleared xmlns="urn:o-ran:interfaces:1.0">1976-10-15T10:34:12Z</last-cleared>
+      <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">56</interface-groups-id>
+      <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">143</interface-groups-id>
+    </interface>
+  </interfaces>
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 (file)
index 0000000..3de642b
--- /dev/null
@@ -0,0 +1,111 @@
+  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+    <interface>
+      <name>09a95e08-5b53-4734-815f-a9c12300fc62</name>
+      <description>Simulated interface for O-RU</description>
+      <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+      <enabled>true</enabled>
+      <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+      <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>false</enabled>
+        <forwarding>false</forwarding>
+        <mtu>42783</mtu>
+        <address>
+          <ip>6.122.172.49</ip>
+          <prefix-length>14</prefix-length>
+        </address>
+        <address>
+          <ip>206.35.59.57</ip>
+          <netmask>199.41.255.188</netmask>
+        </address>
+        <neighbor>
+          <ip>48.159.72.129</ip>
+          <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+        </neighbor>
+        <neighbor>
+          <ip>187.230.45.63</ip>
+          <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+        </neighbor>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>38</u-plane-marking>
+          <c-plane-marking>16</c-plane-marking>
+          <s-plane-marking>62</s-plane-marking>
+          <other-marking>27</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+            <enhanced-marking>21</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>2zF55KBup</up-marking-name>
+            <enhanced-marking>5</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv4>
+      <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>true</enabled>
+        <forwarding>true</forwarding>
+        <mtu>1163652863</mtu>
+        <address>
+          <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+          <prefix-length>124</prefix-length>
+        </address>
+        <address>
+          <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+          <prefix-length>65</prefix-length>
+        </address>
+        <neighbor>
+          <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+          <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+        </neighbor>
+        <neighbor>
+          <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+          <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+        </neighbor>
+        <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+        <autoconf>
+          <create-global-addresses>true</create-global-addresses>
+          <create-temporary-addresses>true</create-temporary-addresses>
+          <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+          <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+        </autoconf>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>29</u-plane-marking>
+          <c-plane-marking>50</c-plane-marking>
+          <s-plane-marking>14</s-plane-marking>
+          <other-marking>61</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+            <enhanced-marking>18</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+            <enhanced-marking>29</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv6>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+      <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+      <port-reference xmlns="urn:o-ran:interfaces:1.0">
+        <port-number>113</port-number>
+      </port-reference>
+      <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+      <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+      <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+        <u-plane-marking>3</u-plane-marking>
+        <c-plane-marking>0</c-plane-marking>
+        <m-plane-marking>1</m-plane-marking>
+        <s-plane-marking>6</s-plane-marking>
+        <other-marking>4</other-marking>
+        <enhanced-uplane-markings>
+          <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+          <enhanced-marking>5</enhanced-marking>
+        </enhanced-uplane-markings>
+        <enhanced-uplane-markings>
+          <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+          <enhanced-marking>2</enhanced-marking>
+        </enhanced-uplane-markings>
+      </class-of-service>
+    </interface>
+  </interfaces>
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 (file)
index 0000000..7e558f2
--- /dev/null
@@ -0,0 +1,21 @@
+<simulation xmlns="urn:o-ran-sc:params:xml:ns:yang:nts:network:function">
+    <network-function>
+      <mount-point-addressing-method>docker-mapping</mount-point-addressing-method>
+      <fault-generation>
+        <fault-delay-list>
+          <index>0</index>
+          <delay-period>10</delay-period>
+        </fault-delay-list>
+      </fault-generation>
+      <netconf>
+        <faults-enabled>true</faults-enabled>
+        <call-home>true</call-home>
+      </netconf>
+      <ves>
+        <faults-enabled>false</faults-enabled>
+        <pnf-registration>false</pnf-registration>
+        <heartbeat-period>120</heartbeat-period>
+      </ves>
+      <function-type>NTS_FUNCTION_TYPE_O_RAN_O_RU_FH</function-type>
+    </network-function>
+  </simulation>
\ 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 (file)
index 0000000..a4ba808
--- /dev/null
@@ -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" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>%%fault-id%%</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+        "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 (file)
index 0000000..18c83c9
--- /dev/null
@@ -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 (file)
index 0000000..ab757fa
--- /dev/null
@@ -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 (file)
index 0000000..11f4d8d
--- /dev/null
@@ -0,0 +1,151 @@
+  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+    <interface>
+      <name>0d242150-33a6-4e7c-9988-ae3b01e8a7ea</name>
+      <description>Simulated interface for O-RU</description>
+      <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+      <enabled>true</enabled>
+      <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+      <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>false</enabled>
+        <forwarding>false</forwarding>
+        <mtu>42783</mtu>
+        <address>
+          <ip>6.122.172.49</ip>
+          <prefix-length>14</prefix-length>
+          <origin>static</origin>
+        </address>
+        <address>
+          <ip>206.35.59.57</ip>
+          <netmask>199.41.255.188</netmask>
+          <origin>random</origin>
+        </address>
+        <neighbor>
+          <ip>48.159.72.129</ip>
+          <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+          <origin>other</origin>
+        </neighbor>
+        <neighbor>
+          <ip>187.230.45.63</ip>
+          <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+          <origin>dynamic</origin>
+        </neighbor>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>38</u-plane-marking>
+          <c-plane-marking>16</c-plane-marking>
+          <s-plane-marking>62</s-plane-marking>
+          <other-marking>27</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+            <enhanced-marking>21</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>2zF55KBup</up-marking-name>
+            <enhanced-marking>5</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv4>
+      <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>true</enabled>
+        <forwarding>true</forwarding>
+        <mtu>1163652863</mtu>
+        <address>
+          <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+          <prefix-length>124</prefix-length>
+          <origin>other</origin>
+          <status>tentative</status>
+        </address>
+        <address>
+          <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+          <prefix-length>65</prefix-length>
+          <origin>link-layer</origin>
+          <status>preferred</status>
+        </address>
+        <neighbor>
+          <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+          <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+          <origin>other</origin>
+          <is-router/>
+          <state>probe</state>
+        </neighbor>
+        <neighbor>
+          <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+          <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+          <origin>other</origin>
+          <state>incomplete</state>
+        </neighbor>
+        <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+        <autoconf>
+          <create-global-addresses>true</create-global-addresses>
+          <create-temporary-addresses>true</create-temporary-addresses>
+          <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+          <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+        </autoconf>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>29</u-plane-marking>
+          <c-plane-marking>50</c-plane-marking>
+          <s-plane-marking>14</s-plane-marking>
+          <other-marking>61</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+            <enhanced-marking>18</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+            <enhanced-marking>29</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv6>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+      <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+      <port-reference xmlns="urn:o-ran:interfaces:1.0">
+        <port-number>113</port-number>
+      </port-reference>
+      <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+      <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+      <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+        <u-plane-marking>3</u-plane-marking>
+        <c-plane-marking>0</c-plane-marking>
+        <m-plane-marking>1</m-plane-marking>
+        <s-plane-marking>6</s-plane-marking>
+        <other-marking>4</other-marking>
+        <enhanced-uplane-markings>
+          <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+          <enhanced-marking>5</enhanced-marking>
+        </enhanced-uplane-markings>
+        <enhanced-uplane-markings>
+          <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+          <enhanced-marking>2</enhanced-marking>
+        </enhanced-uplane-markings>
+      </class-of-service>
+      <admin-status>up</admin-status>
+      <oper-status>unknown</oper-status>
+      <last-change>2018-12-04T01:22:44Z</last-change>
+      <if-index>1399123220</if-index>
+      <phys-address>fc:07:1e:ec:24:a3</phys-address>
+      <higher-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</higher-layer-if>
+      <lower-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</lower-layer-if>
+      <speed>2897952377425309696</speed>
+      <statistics>
+        <discontinuity-time>2037-04-15T16:07:29Z</discontinuity-time>
+        <in-octets>2571268368646403584</in-octets>
+        <in-unicast-pkts>6267618126971935744</in-unicast-pkts>
+        <in-broadcast-pkts>1109994561130658944</in-broadcast-pkts>
+        <in-multicast-pkts>3315305959068576256</in-multicast-pkts>
+        <in-discards>1267048002</in-discards>
+        <in-errors>2454029092</in-errors>
+        <in-unknown-protos>603209482</in-unknown-protos>
+        <out-octets>1059514199864528128</out-octets>
+        <out-unicast-pkts>6657904184753078272</out-unicast-pkts>
+        <out-broadcast-pkts>5105130509884859392</out-broadcast-pkts>
+        <out-multicast-pkts>2014558074734005248</out-multicast-pkts>
+        <out-discards>2053161590</out-discards>
+        <out-errors>1475901304</out-errors>
+      </statistics>
+      <last-cleared xmlns="urn:o-ran:interfaces:1.0">1976-10-15T10:34:12Z</last-cleared>
+      <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">56</interface-groups-id>
+      <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">143</interface-groups-id>
+    </interface>
+  </interfaces>
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 (file)
index 0000000..cdf695e
--- /dev/null
@@ -0,0 +1,111 @@
+  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+    <interface>
+      <name>0d242150-33a6-4e7c-9988-ae3b01e8a7ea</name>
+      <description>Simulated interface for O-RU</description>
+      <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+      <enabled>true</enabled>
+      <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+      <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>false</enabled>
+        <forwarding>false</forwarding>
+        <mtu>42783</mtu>
+        <address>
+          <ip>6.122.172.49</ip>
+          <prefix-length>14</prefix-length>
+        </address>
+        <address>
+          <ip>206.35.59.57</ip>
+          <netmask>199.41.255.188</netmask>
+        </address>
+        <neighbor>
+          <ip>48.159.72.129</ip>
+          <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+        </neighbor>
+        <neighbor>
+          <ip>187.230.45.63</ip>
+          <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+        </neighbor>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>38</u-plane-marking>
+          <c-plane-marking>16</c-plane-marking>
+          <s-plane-marking>62</s-plane-marking>
+          <other-marking>27</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+            <enhanced-marking>21</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>2zF55KBup</up-marking-name>
+            <enhanced-marking>5</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv4>
+      <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>true</enabled>
+        <forwarding>true</forwarding>
+        <mtu>1163652863</mtu>
+        <address>
+          <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+          <prefix-length>124</prefix-length>
+        </address>
+        <address>
+          <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+          <prefix-length>65</prefix-length>
+        </address>
+        <neighbor>
+          <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+          <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+        </neighbor>
+        <neighbor>
+          <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+          <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+        </neighbor>
+        <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+        <autoconf>
+          <create-global-addresses>true</create-global-addresses>
+          <create-temporary-addresses>true</create-temporary-addresses>
+          <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+          <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+        </autoconf>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>29</u-plane-marking>
+          <c-plane-marking>50</c-plane-marking>
+          <s-plane-marking>14</s-plane-marking>
+          <other-marking>61</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+            <enhanced-marking>18</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+            <enhanced-marking>29</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv6>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+      <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+      <port-reference xmlns="urn:o-ran:interfaces:1.0">
+        <port-number>113</port-number>
+      </port-reference>
+      <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+      <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+      <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+        <u-plane-marking>3</u-plane-marking>
+        <c-plane-marking>0</c-plane-marking>
+        <m-plane-marking>1</m-plane-marking>
+        <s-plane-marking>6</s-plane-marking>
+        <other-marking>4</other-marking>
+        <enhanced-uplane-markings>
+          <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+          <enhanced-marking>5</enhanced-marking>
+        </enhanced-uplane-markings>
+        <enhanced-uplane-markings>
+          <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+          <enhanced-marking>2</enhanced-marking>
+        </enhanced-uplane-markings>
+      </class-of-service>
+    </interface>
+  </interfaces>
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 (file)
index 0000000..a4ba808
--- /dev/null
@@ -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" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>%%fault-id%%</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+        "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 (file)
index 0000000..18c83c9
--- /dev/null
@@ -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 (file)
index 0000000..ab757fa
--- /dev/null
@@ -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 (file)
index 0000000..c6d3038
--- /dev/null
@@ -0,0 +1,151 @@
+  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+    <interface>
+      <name>d3ea2f17-a841-4e71-9ef9-9549159aabe7</name>
+      <description>Simulated interface for O-RU</description>
+      <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+      <enabled>true</enabled>
+      <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+      <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>false</enabled>
+        <forwarding>false</forwarding>
+        <mtu>42783</mtu>
+        <address>
+          <ip>6.122.172.49</ip>
+          <prefix-length>14</prefix-length>
+          <origin>static</origin>
+        </address>
+        <address>
+          <ip>206.35.59.57</ip>
+          <netmask>199.41.255.188</netmask>
+          <origin>random</origin>
+        </address>
+        <neighbor>
+          <ip>48.159.72.129</ip>
+          <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+          <origin>other</origin>
+        </neighbor>
+        <neighbor>
+          <ip>187.230.45.63</ip>
+          <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+          <origin>dynamic</origin>
+        </neighbor>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>38</u-plane-marking>
+          <c-plane-marking>16</c-plane-marking>
+          <s-plane-marking>62</s-plane-marking>
+          <other-marking>27</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+            <enhanced-marking>21</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>2zF55KBup</up-marking-name>
+            <enhanced-marking>5</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv4>
+      <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>true</enabled>
+        <forwarding>true</forwarding>
+        <mtu>1163652863</mtu>
+        <address>
+          <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+          <prefix-length>124</prefix-length>
+          <origin>other</origin>
+          <status>tentative</status>
+        </address>
+        <address>
+          <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+          <prefix-length>65</prefix-length>
+          <origin>link-layer</origin>
+          <status>preferred</status>
+        </address>
+        <neighbor>
+          <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+          <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+          <origin>other</origin>
+          <is-router/>
+          <state>probe</state>
+        </neighbor>
+        <neighbor>
+          <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+          <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+          <origin>other</origin>
+          <state>incomplete</state>
+        </neighbor>
+        <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+        <autoconf>
+          <create-global-addresses>true</create-global-addresses>
+          <create-temporary-addresses>true</create-temporary-addresses>
+          <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+          <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+        </autoconf>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>29</u-plane-marking>
+          <c-plane-marking>50</c-plane-marking>
+          <s-plane-marking>14</s-plane-marking>
+          <other-marking>61</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+            <enhanced-marking>18</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+            <enhanced-marking>29</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv6>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+      <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+      <port-reference xmlns="urn:o-ran:interfaces:1.0">
+        <port-number>113</port-number>
+      </port-reference>
+      <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+      <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+      <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+        <u-plane-marking>3</u-plane-marking>
+        <c-plane-marking>0</c-plane-marking>
+        <m-plane-marking>1</m-plane-marking>
+        <s-plane-marking>6</s-plane-marking>
+        <other-marking>4</other-marking>
+        <enhanced-uplane-markings>
+          <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+          <enhanced-marking>5</enhanced-marking>
+        </enhanced-uplane-markings>
+        <enhanced-uplane-markings>
+          <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+          <enhanced-marking>2</enhanced-marking>
+        </enhanced-uplane-markings>
+      </class-of-service>
+      <admin-status>up</admin-status>
+      <oper-status>unknown</oper-status>
+      <last-change>2018-12-04T01:22:44Z</last-change>
+      <if-index>1399123220</if-index>
+      <phys-address>fc:07:1e:ec:24:a3</phys-address>
+      <higher-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</higher-layer-if>
+      <lower-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</lower-layer-if>
+      <speed>2897952377425309696</speed>
+      <statistics>
+        <discontinuity-time>2037-04-15T16:07:29Z</discontinuity-time>
+        <in-octets>2571268368646403584</in-octets>
+        <in-unicast-pkts>6267618126971935744</in-unicast-pkts>
+        <in-broadcast-pkts>1109994561130658944</in-broadcast-pkts>
+        <in-multicast-pkts>3315305959068576256</in-multicast-pkts>
+        <in-discards>1267048002</in-discards>
+        <in-errors>2454029092</in-errors>
+        <in-unknown-protos>603209482</in-unknown-protos>
+        <out-octets>1059514199864528128</out-octets>
+        <out-unicast-pkts>6657904184753078272</out-unicast-pkts>
+        <out-broadcast-pkts>5105130509884859392</out-broadcast-pkts>
+        <out-multicast-pkts>2014558074734005248</out-multicast-pkts>
+        <out-discards>2053161590</out-discards>
+        <out-errors>1475901304</out-errors>
+      </statistics>
+      <last-cleared xmlns="urn:o-ran:interfaces:1.0">1976-10-15T10:34:12Z</last-cleared>
+      <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">56</interface-groups-id>
+      <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">143</interface-groups-id>
+    </interface>
+  </interfaces>
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 (file)
index 0000000..19d5f98
--- /dev/null
@@ -0,0 +1,111 @@
+  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+    <interface>
+      <name>d3ea2f17-a841-4e71-9ef9-9549159aabe7</name>
+      <description>Simulated interface for O-RU</description>
+      <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+      <enabled>true</enabled>
+      <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+      <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>false</enabled>
+        <forwarding>false</forwarding>
+        <mtu>42783</mtu>
+        <address>
+          <ip>6.122.172.49</ip>
+          <prefix-length>14</prefix-length>
+        </address>
+        <address>
+          <ip>206.35.59.57</ip>
+          <netmask>199.41.255.188</netmask>
+        </address>
+        <neighbor>
+          <ip>48.159.72.129</ip>
+          <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+        </neighbor>
+        <neighbor>
+          <ip>187.230.45.63</ip>
+          <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+        </neighbor>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>38</u-plane-marking>
+          <c-plane-marking>16</c-plane-marking>
+          <s-plane-marking>62</s-plane-marking>
+          <other-marking>27</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+            <enhanced-marking>21</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>2zF55KBup</up-marking-name>
+            <enhanced-marking>5</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv4>
+      <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+        <enabled>true</enabled>
+        <forwarding>true</forwarding>
+        <mtu>1163652863</mtu>
+        <address>
+          <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+          <prefix-length>124</prefix-length>
+        </address>
+        <address>
+          <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+          <prefix-length>65</prefix-length>
+        </address>
+        <neighbor>
+          <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+          <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+        </neighbor>
+        <neighbor>
+          <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+          <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+        </neighbor>
+        <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+        <autoconf>
+          <create-global-addresses>true</create-global-addresses>
+          <create-temporary-addresses>true</create-temporary-addresses>
+          <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+          <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+        </autoconf>
+        <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+        <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+          <u-plane-marking>29</u-plane-marking>
+          <c-plane-marking>50</c-plane-marking>
+          <s-plane-marking>14</s-plane-marking>
+          <other-marking>61</other-marking>
+          <enhanced-uplane-markings>
+            <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+            <enhanced-marking>18</enhanced-marking>
+          </enhanced-uplane-markings>
+          <enhanced-uplane-markings>
+            <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+            <enhanced-marking>29</enhanced-marking>
+          </enhanced-uplane-markings>
+        </diffserv-markings>
+      </ipv6>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+      <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+      <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+      <port-reference xmlns="urn:o-ran:interfaces:1.0">
+        <port-number>113</port-number>
+      </port-reference>
+      <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+      <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+      <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+        <u-plane-marking>3</u-plane-marking>
+        <c-plane-marking>0</c-plane-marking>
+        <m-plane-marking>1</m-plane-marking>
+        <s-plane-marking>6</s-plane-marking>
+        <other-marking>4</other-marking>
+        <enhanced-uplane-markings>
+          <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+          <enhanced-marking>5</enhanced-marking>
+        </enhanced-uplane-markings>
+        <enhanced-uplane-markings>
+          <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+          <enhanced-marking>2</enhanced-marking>
+        </enhanced-uplane-markings>
+      </class-of-service>
+    </interface>
+  </interfaces>
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 (file)
index 0000000..1aaef9c
--- /dev/null
@@ -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" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>$$uint16_counter$$</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+        "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 (file)
index 0000000..861c09b
--- /dev/null
@@ -0,0 +1,316 @@
+  <context xmlns="urn:onf:otcc:yang:tapi-common">
+    <uuid>6f69da3a-a243-4058-974e-baf11c357b7a</uuid>
+    <name>
+      <value-name>test</value-name>
+      <value>context</value>
+    </name>
+    <topology-context xmlns="urn:onf:otcc:yang:tapi-topology">
+      <topology>
+        <uuid>7adfee73-44be-4813-a0dc-89f657f0a436</uuid>
+        <node>
+          <uuid>ac089635-7a85-4197-9310-9b14f476a4a9</uuid>
+          <owned-node-edge-point>
+            <uuid>539f24cb-a5e9-454f-b05d-6307be419afe</uuid>
+            <layer-protocol-name>ETH</layer-protocol-name>
+            <supported-cep-layer-protocol-qualifier xmlns:tapi-dsr="urn:onf:otcc:yang:tapi-dsr">tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE</supported-cep-layer-protocol-qualifier>
+            <link-port-direction>BIDIRECTIONAL</link-port-direction>
+            <link-port-role>SYMMETRIC</link-port-role>
+            <name>
+              <value-name>interface-name</value-name>
+              <value>O-DU-interface-1</value>
+            </name>
+            <administrative-state>LOCKED</administrative-state>
+            <operational-state>ENABLED</operational-state>
+            <lifecycle-state>INSTALLED</lifecycle-state>
+
+          </owned-node-edge-point>
+          <layer-protocol-name>ETH</layer-protocol-name>
+          <name>
+            <value-name>device-name</value-name>
+            <value>highstreet-O-DU-1122</value>
+          </name>
+          <administrative-state>LOCKED</administrative-state>
+          <operational-state>ENABLED</operational-state>
+          <lifecycle-state>INSTALLED</lifecycle-state>
+          <cost-characteristic>
+            <cost-name>cost</cost-name>
+            <cost-value>value-1</cost-value>
+            <cost-algorithm>alg1</cost-algorithm>
+          </cost-characteristic>
+          <latency-characteristic>
+            <traffic-property-name>property-1</traffic-property-name>
+            <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+            <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+            <jitter-characteristic>jitter-1</jitter-characteristic>
+            <wander-characteristic>wander-1</wander-characteristic>
+          </latency-characteristic>
+        </node>
+        <node>
+          <uuid>6b0d3930-100b-466c-9f44-2748ffb6aaa1</uuid>
+          <owned-node-edge-point>
+            <uuid>bb7e5882-6e3a-46a7-a95b-0bb7310ede22</uuid>
+            <layer-protocol-name>ETH</layer-protocol-name>
+            <supported-cep-layer-protocol-qualifier xmlns:tapi-dsr="urn:onf:otcc:yang:tapi-dsr">tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE</supported-cep-layer-protocol-qualifier>
+            <link-port-direction>BIDIRECTIONAL</link-port-direction>
+            <link-port-role>SYMMETRIC</link-port-role>
+            <name>
+              <value-name>interface-name</value-name>
+              <value>09a95e08-5b53-4734-815f-a9c12300fc62</value>
+            </name>
+            <name>
+              <value-name>interface-description</value-name>
+              <value>Simulated interface for O-RU</value>
+            </name>
+            <administrative-state>LOCKED</administrative-state>
+            <operational-state>ENABLED</operational-state>
+            <lifecycle-state>INSTALLED</lifecycle-state>
+
+          </owned-node-edge-point>
+          <layer-protocol-name>ETH</layer-protocol-name>
+          <name>
+            <value-name>device-name</value-name>
+            <value>highstreet-O-RU-11221</value>
+          </name>
+          <administrative-state>LOCKED</administrative-state>
+          <operational-state>ENABLED</operational-state>
+          <lifecycle-state>INSTALLED</lifecycle-state>
+          <cost-characteristic>
+            <cost-name>cost</cost-name>
+            <cost-value>value-1</cost-value>
+            <cost-algorithm>alg1</cost-algorithm>
+          </cost-characteristic>
+          <latency-characteristic>
+            <traffic-property-name>property-1</traffic-property-name>
+            <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+            <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+            <jitter-characteristic>jitter-1</jitter-characteristic>
+            <wander-characteristic>wander-1</wander-characteristic>
+          </latency-characteristic>
+        </node>
+        <node>
+          <uuid>69a8fdf0-2bdd-44a2-9bc4-8813640fa02c</uuid>
+          <owned-node-edge-point>
+            <uuid>124488fc-05d0-421b-8a16-4eaf86cbc89b</uuid>
+            <layer-protocol-name>ETH</layer-protocol-name>
+            <supported-cep-layer-protocol-qualifier xmlns:tapi-dsr="urn:onf:otcc:yang:tapi-dsr">tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE</supported-cep-layer-protocol-qualifier>
+            <link-port-direction>BIDIRECTIONAL</link-port-direction>
+            <link-port-role>SYMMETRIC</link-port-role>
+            <name>
+              <value-name>interface-name</value-name>
+              <value>0d242150-33a6-4e7c-9988-ae3b01e8a7ea</value>
+            </name>
+            <name>
+              <value-name>interface-description</value-name>
+              <value>Simulated interface for O-RU</value>
+            </name>
+            <administrative-state>LOCKED</administrative-state>
+            <operational-state>ENABLED</operational-state>
+            <lifecycle-state>INSTALLED</lifecycle-state>
+
+          </owned-node-edge-point>
+          <layer-protocol-name>ETH</layer-protocol-name>
+          <name>
+            <value-name>device-name</value-name>
+            <value>highstreet-O-RU-11222</value>
+          </name>
+          <administrative-state>LOCKED</administrative-state>
+          <operational-state>ENABLED</operational-state>
+          <lifecycle-state>INSTALLED</lifecycle-state>
+          <cost-characteristic>
+            <cost-name>cost</cost-name>
+            <cost-value>value-1</cost-value>
+            <cost-algorithm>alg1</cost-algorithm>
+          </cost-characteristic>
+          <latency-characteristic>
+            <traffic-property-name>property-1</traffic-property-name>
+            <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+            <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+            <jitter-characteristic>jitter-1</jitter-characteristic>
+            <wander-characteristic>wander-1</wander-characteristic>
+          </latency-characteristic>
+        </node>
+        <node>
+          <uuid>c8499a83-211e-4cef-be30-a1cc2208bbb6</uuid>
+          <owned-node-edge-point>
+            <uuid>5f01a4c2-9067-4b05-a1a5-7d8998f4f11f</uuid>
+            <layer-protocol-name>ETH</layer-protocol-name>
+            <supported-cep-layer-protocol-qualifier xmlns:tapi-dsr="urn:onf:otcc:yang:tapi-dsr">tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE</supported-cep-layer-protocol-qualifier>
+            <link-port-direction>BIDIRECTIONAL</link-port-direction>
+            <link-port-role>SYMMETRIC</link-port-role>
+            <name>
+              <value-name>interface-name</value-name>
+              <value>d3ea2f17-a841-4e71-9ef9-9549159aabe7</value>
+            </name>
+            <name>
+              <value-name>interface-description</value-name>
+              <value>Simulated interface for O-RU</value>
+            </name>
+            <administrative-state>LOCKED</administrative-state>
+            <operational-state>ENABLED</operational-state>
+            <lifecycle-state>INSTALLED</lifecycle-state>
+
+          </owned-node-edge-point>
+          <layer-protocol-name>ETH</layer-protocol-name>
+          <name>
+            <value-name>device-name</value-name>
+            <value>highstreet-O-RU-11223</value>
+          </name>
+          <administrative-state>LOCKED</administrative-state>
+          <operational-state>ENABLED</operational-state>
+          <lifecycle-state>INSTALLED</lifecycle-state>
+          <cost-characteristic>
+            <cost-name>cost</cost-name>
+            <cost-value>value-1</cost-value>
+            <cost-algorithm>alg1</cost-algorithm>
+          </cost-characteristic>
+          <latency-characteristic>
+            <traffic-property-name>property-1</traffic-property-name>
+            <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+            <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+            <jitter-characteristic>jitter-1</jitter-characteristic>
+            <wander-characteristic>wander-1</wander-characteristic>
+          </latency-characteristic>
+        </node>
+        <link>
+          <uuid>ac78b69f-22df-46fd-ae76-cc989bc30abc</uuid>
+          <node-edge-point>
+            <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+            <node-uuid>ac089635-7a85-4197-9310-9b14f476a4a9</node-uuid>
+            <node-edge-point-uuid>539f24cb-a5e9-454f-b05d-6307be419afe</node-edge-point-uuid>
+          </node-edge-point>
+          <node-edge-point>
+            <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+            <node-uuid>6b0d3930-100b-466c-9f44-2748ffb6aaa1</node-uuid>
+            <node-edge-point-uuid>bb7e5882-6e3a-46a7-a95b-0bb7310ede22</node-edge-point-uuid>
+          </node-edge-point>
+          <layer-protocol-name>ETH</layer-protocol-name>
+          <direction>BIDIRECTIONAL</direction>
+          <name>
+            <value-name>link-name</value-name>
+            <value>highstreet-O-DU-1122-to-highstreet-O-RU-11221</value>
+          </name>
+          <administrative-state>LOCKED</administrative-state>
+          <operational-state>ENABLED</operational-state>
+          <lifecycle-state>INSTALLED</lifecycle-state>
+          <cost-characteristic>
+            <cost-name>cost</cost-name>
+            <cost-value>value-1</cost-value>
+            <cost-algorithm>alg1</cost-algorithm>
+          </cost-characteristic>
+          <latency-characteristic>
+            <traffic-property-name>property-1</traffic-property-name>
+            <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+            <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+            <jitter-characteristic>jitter-1</jitter-characteristic>
+            <wander-characteristic>wander-1</wander-characteristic>
+          </latency-characteristic>
+          <risk-characteristic>
+            <risk-characteristic-name>risk-name</risk-characteristic-name>
+            <risk-identifier-list>risk-1</risk-identifier-list>
+          </risk-characteristic>
+          <validation-mechanism>
+            <validation-mechanism>mechanism-1</validation-mechanism>
+            <layer-protocol-adjacency-validated>validated</layer-protocol-adjacency-validated>
+            <validation-robustness>very-robust</validation-robustness>
+          </validation-mechanism>
+          <transitioned-layer-protocol-name>layer-protocol-1---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+          <transitioned-layer-protocol-name>layer-protocol-2---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+        </link>
+        <link>
+          <uuid>ac78b69f-22df-46fd-ae76-cc989bc30ae9</uuid>
+          <node-edge-point>
+            <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+            <node-uuid>ac089635-7a85-4197-9310-9b14f476a4a9</node-uuid>
+            <node-edge-point-uuid>539f24cb-a5e9-454f-b05d-6307be419afe</node-edge-point-uuid>
+          </node-edge-point>
+          <node-edge-point>
+            <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+            <node-uuid>69a8fdf0-2bdd-44a2-9bc4-8813640fa02c</node-uuid>
+            <node-edge-point-uuid>124488fc-05d0-421b-8a16-4eaf86cbc89b</node-edge-point-uuid>
+          </node-edge-point>
+          <layer-protocol-name>ETH</layer-protocol-name>
+          <direction>BIDIRECTIONAL</direction>
+          <name>
+            <value-name>link-name</value-name>
+            <value>highstreet-O-DU-1122-to-highstreet-O-RU-11222</value>
+          </name>
+          <administrative-state>LOCKED</administrative-state>
+          <operational-state>ENABLED</operational-state>
+          <lifecycle-state>INSTALLED</lifecycle-state>
+          <cost-characteristic>
+            <cost-name>cost</cost-name>
+            <cost-value>value-1</cost-value>
+            <cost-algorithm>alg1</cost-algorithm>
+          </cost-characteristic>
+          <latency-characteristic>
+            <traffic-property-name>property-1</traffic-property-name>
+            <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+            <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+            <jitter-characteristic>jitter-1</jitter-characteristic>
+            <wander-characteristic>wander-1</wander-characteristic>
+          </latency-characteristic>
+          <risk-characteristic>
+            <risk-characteristic-name>risk-name</risk-characteristic-name>
+            <risk-identifier-list>risk-1</risk-identifier-list>
+          </risk-characteristic>
+          <validation-mechanism>
+            <validation-mechanism>mechanism-1</validation-mechanism>
+            <layer-protocol-adjacency-validated>validated</layer-protocol-adjacency-validated>
+            <validation-robustness>very-robust</validation-robustness>
+          </validation-mechanism>
+          <transitioned-layer-protocol-name>layer-protocol-1---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+          <transitioned-layer-protocol-name>layer-protocol-2---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+        </link>
+        <link>
+          <uuid>bc98b69f-22df-46fd-ae76-cc989bc30ae9</uuid>
+          <node-edge-point>
+            <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+            <node-uuid>ac089635-7a85-4197-9310-9b14f476a4a9</node-uuid>
+            <node-edge-point-uuid>539f24cb-a5e9-454f-b05d-6307be419afe</node-edge-point-uuid>
+          </node-edge-point>
+          <node-edge-point>
+            <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+            <node-uuid>c8499a83-211e-4cef-be30-a1cc2208bbb6</node-uuid>
+            <node-edge-point-uuid>5f01a4c2-9067-4b05-a1a5-7d8998f4f11f</node-edge-point-uuid>
+          </node-edge-point>
+          <layer-protocol-name>ETH</layer-protocol-name>
+          <direction>BIDIRECTIONAL</direction>
+          <name>
+            <value-name>link-name</value-name>
+            <value>highstreet-O-DU-1122-to-highstreet-O-RU-11223</value>
+          </name>
+          <administrative-state>LOCKED</administrative-state>
+          <operational-state>ENABLED</operational-state>
+          <lifecycle-state>INSTALLED</lifecycle-state>
+          <cost-characteristic>
+            <cost-name>cost</cost-name>
+            <cost-value>value-1</cost-value>
+            <cost-algorithm>alg1</cost-algorithm>
+          </cost-characteristic>
+          <latency-characteristic>
+            <traffic-property-name>property-1</traffic-property-name>
+            <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+            <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+            <jitter-characteristic>jitter-1</jitter-characteristic>
+            <wander-characteristic>wander-1</wander-characteristic>
+          </latency-characteristic>
+          <risk-characteristic>
+            <risk-characteristic-name>risk-name</risk-characteristic-name>
+            <risk-identifier-list>risk-1</risk-identifier-list>
+          </risk-characteristic>
+          <validation-mechanism>
+            <validation-mechanism>mechanism-1</validation-mechanism>
+            <layer-protocol-adjacency-validated>validated</layer-protocol-adjacency-validated>
+            <validation-robustness>very-robust</validation-robustness>
+          </validation-mechanism>
+          <transitioned-layer-protocol-name>layer-protocol-1---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+          <transitioned-layer-protocol-name>layer-protocol-2---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+        </link>
+        <layer-protocol-name>ETH</layer-protocol-name>
+        <name>
+          <value-name>test</value-name>
+          <value>topology</value>
+        </name>
+      </topology>
+    </topology-context>
+  </context>
\ 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 (file)
index 0000000..323926b
--- /dev/null
@@ -0,0 +1,7 @@
+  <context xmlns="urn:onf:otcc:yang:tapi-common">
+    <uuid>6f69da3a-a243-4058-974e-baf11c357b7a</uuid>
+    <name>
+      <value-name>test</value-name>
+      <value>context</value>
+    </name>
+  </context>
\ No newline at end of file
diff --git a/solution/integration/smo/.env b/solution/integration/smo/.env
deleted file mode 100644 (file)
index 283cc7f..0000000
+++ /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 (file)
index b333033..0000000
+++ /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://<host_ip>: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 (file)
index 0000000..6f4e5c8
--- /dev/null
@@ -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
@@ -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,
@@ -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,
similarity index 56%
rename from solution/integration/smo/docker-compose.yml
rename to solution/integration/smo/common/docker-compose.yml
index 977f91e..e3088fd 100755 (executable)
@@ -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,
 # 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 (file)
index 0000000..a36804f
--- /dev/null
@@ -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 (file)
index 0000000..1573447
--- /dev/null
@@ -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 (file)
index 0000000..bc4a5bc
--- /dev/null
@@ -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 (file)
index 0000000..649026c
--- /dev/null
@@ -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 (file)
index 0000000..c7621d7
--- /dev/null
@@ -0,0 +1,2154 @@
+{
+  "id": "onap",
+  "realm": "onap",
+  "displayName": "O-RAN-SC SIM & OAM & NON-RT-RIC",
+  "displayNameHtml": "<div class=\"kc-logo-text\"><span>O-RAN-SC: SIM and OAM and Non-RT-RIC</span></div>",
+  "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 (file)
index 0000000..7097355
--- /dev/null
@@ -0,0 +1,602 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<server xmlns="urn:jboss:domain:14.0">
+    <extensions>
+        <extension module="org.jboss.as.clustering.infinispan"/>
+        <extension module="org.jboss.as.connector"/>
+        <extension module="org.jboss.as.deployment-scanner"/>
+        <extension module="org.jboss.as.ee"/>
+        <extension module="org.jboss.as.ejb3"/>
+        <extension module="org.jboss.as.jaxrs"/>
+        <extension module="org.jboss.as.jmx"/>
+        <extension module="org.jboss.as.jpa"/>
+        <extension module="org.jboss.as.logging"/>
+        <extension module="org.jboss.as.mail"/>
+        <extension module="org.jboss.as.naming"/>
+        <extension module="org.jboss.as.remoting"/>
+        <extension module="org.jboss.as.security"/>
+        <extension module="org.jboss.as.transactions"/>
+        <extension module="org.jboss.as.weld"/>
+        <extension module="org.keycloak.keycloak-server-subsystem"/>
+        <extension module="org.wildfly.extension.bean-validation"/>
+        <extension module="org.wildfly.extension.core-management"/>
+        <extension module="org.wildfly.extension.elytron"/>
+        <extension module="org.wildfly.extension.io"/>
+        <extension module="org.wildfly.extension.microprofile.config-smallrye"/>
+        <extension module="org.wildfly.extension.microprofile.health-smallrye"/>
+        <extension module="org.wildfly.extension.microprofile.metrics-smallrye"/>
+        <extension module="org.wildfly.extension.request-controller"/>
+        <extension module="org.wildfly.extension.security.manager"/>
+        <extension module="org.wildfly.extension.undertow"/>
+    </extensions>
+    <management>
+        <security-realms>
+            <security-realm name="ManagementRealm">
+                <authentication>
+                    <local default-user="$local" skip-group-loading="true"/>
+                    <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
+                </authentication>
+                <authorization map-groups-to-roles="false">
+                    <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
+                </authorization>
+            </security-realm>
+            <security-realm name="ApplicationRealm">
+                <server-identities>
+                    <ssl>
+                        <keystore path="application.keystore" relative-to="jboss.server.config.dir" keystore-password="password" alias="server" key-password="password" generate-self-signed-certificate-host="localhost"/>
+                    </ssl>
+                </server-identities>
+                <authentication>
+                    <local default-user="$local" allowed-users="*" skip-group-loading="true"/>
+                    <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
+                </authentication>
+                <authorization>
+                    <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
+                </authorization>
+            </security-realm>
+        </security-realms>
+        <audit-log>
+            <formatters>
+                <json-formatter name="json-formatter"/>
+            </formatters>
+            <handlers>
+                <file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
+            </handlers>
+            <logger log-boot="true" log-read-only="false" enabled="false">
+                <handlers>
+                    <handler name="file"/>
+                </handlers>
+            </logger>
+        </audit-log>
+        <management-interfaces>
+            <http-interface security-realm="ManagementRealm">
+                <http-upgrade enabled="true"/>
+                <socket-binding http="management-http"/>
+            </http-interface>
+        </management-interfaces>
+        <access-control provider="simple">
+            <role-mapping>
+                <role name="SuperUser">
+                    <include>
+                        <user name="$local"/>
+                    </include>
+                </role>
+            </role-mapping>
+        </access-control>
+    </management>
+    <profile>
+        <subsystem xmlns="urn:jboss:domain:logging:8.0">
+            <console-handler name="CONSOLE">
+                <formatter>
+                    <named-formatter name="COLOR-PATTERN"/>
+                </formatter>
+            </console-handler>
+            <logger category="com.arjuna">
+                <level name="WARN"/>
+            </logger>
+            <logger category="io.jaegertracing.Configuration">
+                <level name="WARN"/>
+            </logger>
+            <logger category="org.jboss.as.config">
+                <level name="DEBUG"/>
+            </logger>
+            <logger category="sun.rmi">
+                <level name="WARN"/>
+            </logger>
+            <logger category="org.keycloak">
+                <level name="${env.KEYCLOAK_LOGLEVEL:INFO}"/>
+            </logger>
+            <root-logger>
+                <level name="${env.ROOT_LOGLEVEL:INFO}"/>
+                <handlers>
+                    <handler name="CONSOLE"/>
+                </handlers>
+            </root-logger>
+            <formatter name="PATTERN">
+                <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
+            </formatter>
+            <formatter name="COLOR-PATTERN">
+                <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
+            </formatter>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:bean-validation:1.0"/>
+        <subsystem xmlns="urn:jboss:domain:core-management:1.0"/>
+        <subsystem xmlns="urn:jboss:domain:datasources:6.0">
+            <datasources>
+                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
+                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
+                    <driver>h2</driver>
+                    <security>
+                        <user-name>sa</user-name>
+                        <password>sa</password>
+                    </security>
+                </datasource>
+                <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
+                    <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url>
+                    <driver>h2</driver>
+                    <security>
+                        <user-name>sa</user-name>
+                        <password>sa</password>
+                    </security>
+                </datasource>
+                <drivers>
+                    <driver name="h2" module="com.h2database.h2">
+                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
+                    </driver>
+                </drivers>
+            </datasources>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">
+            <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:ee:5.0">
+            <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
+            <concurrent>
+                <context-services>
+                    <context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/>
+                </context-services>
+                <managed-thread-factories>
+                    <managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/>
+                </managed-thread-factories>
+                <managed-executor-services>
+                    <managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" keepalive-time="5000"/>
+                </managed-executor-services>
+                <managed-scheduled-executor-services>
+                    <managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-threshold="60000" keepalive-time="3000"/>
+                </managed-scheduled-executor-services>
+            </concurrent>
+            <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:ejb3:8.0">
+            <session-bean>
+                <stateless>
+                    <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
+                </stateless>
+                <stateful default-access-timeout="5000" cache-ref="simple" passivation-disabled-cache-ref="simple"/>
+                <singleton default-access-timeout="5000"/>
+            </session-bean>
+            <pools>
+                <bean-instance-pools>
+                    <strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
+                    <strict-max-pool name="slsb-strict-max-pool" derive-size="from-worker-pools" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
+                </bean-instance-pools>
+            </pools>
+            <caches>
+                <cache name="simple"/>
+                <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/>
+            </caches>
+            <passivation-stores>
+                <passivation-store name="infinispan" cache-container="ejb" max-size="10000"/>
+            </passivation-stores>
+            <async thread-pool-name="default"/>
+            <timer-service thread-pool-name="default" default-data-store="default-file-store">
+                <data-stores>
+                    <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>
+                </data-stores>
+            </timer-service>
+            <remote cluster="ejb" connectors="http-remoting-connector" thread-pool-name="default">
+                <channel-creation-options>
+                    <option name="MAX_OUTBOUND_MESSAGES" value="1234" type="remoting"/>
+                </channel-creation-options>
+            </remote>
+            <thread-pools>
+                <thread-pool name="default">
+                    <max-threads count="10"/>
+                    <keepalive-time time="60" unit="seconds"/>
+                </thread-pool>
+            </thread-pools>
+            <default-security-domain value="other"/>
+            <default-missing-method-permissions-deny-access value="true"/>
+            <statistics enabled="${wildfly.ejb3.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
+            <log-system-exceptions value="true"/>
+        </subsystem>
+        <subsystem xmlns="urn:wildfly:elytron:11.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+            <providers>
+                <aggregate-providers name="combined-providers">
+                    <providers name="elytron"/>
+                    <providers name="openssl"/>
+                </aggregate-providers>
+                <provider-loader name="elytron" module="org.wildfly.security.elytron"/>
+                <provider-loader name="openssl" module="org.wildfly.openssl"/>
+            </providers>
+            <audit-logging>
+                <file-audit-log name="local-audit" path="audit.log" relative-to="jboss.server.log.dir" format="JSON"/>
+            </audit-logging>
+            <security-domains>
+                <security-domain name="ApplicationDomain" default-realm="ApplicationRealm" permission-mapper="default-permission-mapper">
+                    <realm name="ApplicationRealm" role-decoder="groups-to-roles"/>
+                    <realm name="local"/>
+                </security-domain>
+                <security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper">
+                    <realm name="ManagementRealm" role-decoder="groups-to-roles"/>
+                    <realm name="local" role-mapper="super-user-mapper"/>
+                </security-domain>
+            </security-domains>
+            <security-realms>
+                <identity-realm name="local" identity="$local"/>
+                <properties-realm name="ApplicationRealm">
+                    <users-properties path="application-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ApplicationRealm"/>
+                    <groups-properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
+                </properties-realm>
+                <properties-realm name="ManagementRealm">
+                    <users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/>
+                    <groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
+                </properties-realm>
+            </security-realms>
+            <mappers>
+                <simple-permission-mapper name="default-permission-mapper" mapping-mode="first">
+                    <permission-mapping>
+                        <principal name="anonymous"/>
+                        <permission-set name="default-permissions"/>
+                    </permission-mapping>
+                    <permission-mapping match-all="true">
+                        <permission-set name="login-permission"/>
+                        <permission-set name="default-permissions"/>
+                    </permission-mapping>
+                </simple-permission-mapper>
+                <constant-realm-mapper name="local" realm-name="local"/>
+                <simple-role-decoder name="groups-to-roles" attribute="groups"/>
+                <constant-role-mapper name="super-user-mapper">
+                    <role name="SuperUser"/>
+                </constant-role-mapper>
+            </mappers>
+            <permission-sets>
+                <permission-set name="login-permission">
+                    <permission class-name="org.wildfly.security.auth.permission.LoginPermission"/>
+                </permission-set>
+                <permission-set name="default-permissions">
+                    <permission class-name="org.wildfly.extension.batch.jberet.deployment.BatchPermission" module="org.wildfly.extension.batch.jberet" target-name="*"/>
+                    <permission class-name="org.wildfly.transaction.client.RemoteTransactionPermission" module="org.wildfly.transaction.client"/>
+                    <permission class-name="org.jboss.ejb.client.RemoteEJBPermission" module="org.jboss.ejb-client"/>
+                </permission-set>
+            </permission-sets>
+            <http>
+                <http-authentication-factory name="management-http-authentication" security-domain="ManagementDomain" http-server-mechanism-factory="global">
+                    <mechanism-configuration>
+                        <mechanism mechanism-name="DIGEST">
+                            <mechanism-realm realm-name="ManagementRealm"/>
+                        </mechanism>
+                    </mechanism-configuration>
+                </http-authentication-factory>
+                <provider-http-server-mechanism-factory name="global"/>
+            </http>
+            <sasl>
+                <sasl-authentication-factory name="application-sasl-authentication" sasl-server-factory="configured" security-domain="ApplicationDomain">
+                    <mechanism-configuration>
+                        <mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
+                        <mechanism mechanism-name="DIGEST-MD5">
+                            <mechanism-realm realm-name="ApplicationRealm"/>
+                        </mechanism>
+                    </mechanism-configuration>
+                </sasl-authentication-factory>
+                <sasl-authentication-factory name="management-sasl-authentication" sasl-server-factory="configured" security-domain="ManagementDomain">
+                    <mechanism-configuration>
+                        <mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
+                        <mechanism mechanism-name="DIGEST-MD5">
+                            <mechanism-realm realm-name="ManagementRealm"/>
+                        </mechanism>
+                    </mechanism-configuration>
+                </sasl-authentication-factory>
+                <configurable-sasl-server-factory name="configured" sasl-server-factory="elytron">
+                    <properties>
+                        <property name="wildfly.sasl.local-user.default-user" value="$local"/>
+                    </properties>
+                </configurable-sasl-server-factory>
+                <mechanism-provider-filtering-sasl-server-factory name="elytron" sasl-server-factory="global">
+                    <filters>
+                        <filter provider-name="WildFlyElytron"/>
+                    </filters>
+                </mechanism-provider-filtering-sasl-server-factory>
+                <provider-sasl-server-factory name="global"/>
+            </sasl>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:infinispan:11.0">
+            <cache-container name="keycloak" module="org.keycloak.keycloak-model-infinispan">
+                <local-cache name="realms">
+                    <heap-memory size="10000"/>
+                </local-cache>
+                <local-cache name="users">
+                    <heap-memory size="10000"/>
+                </local-cache>
+                <local-cache name="sessions"/>
+                <local-cache name="authenticationSessions"/>
+                <local-cache name="offlineSessions"/>
+                <local-cache name="clientSessions"/>
+                <local-cache name="offlineClientSessions"/>
+                <local-cache name="loginFailures"/>
+                <local-cache name="work"/>
+                <local-cache name="authorization">
+                    <heap-memory size="10000"/>
+                </local-cache>
+                <local-cache name="keys">
+                    <heap-memory size="1000"/>
+                    <expiration max-idle="3600000"/>
+                </local-cache>
+                <local-cache name="actionTokens">
+                    <heap-memory size="-1"/>
+                    <expiration interval="300000" max-idle="-1"/>
+                </local-cache>
+            </cache-container>
+            <cache-container name="server" default-cache="default" module="org.wildfly.clustering.server">
+                <local-cache name="default">
+                    <transaction mode="BATCH"/>
+                </local-cache>
+            </cache-container>
+            <cache-container name="web" default-cache="passivation" module="org.wildfly.clustering.web.infinispan">
+                <local-cache name="passivation">
+                    <locking isolation="REPEATABLE_READ"/>
+                    <transaction mode="BATCH"/>
+                    <file-store passivation="true" purge="false"/>
+                </local-cache>
+                <local-cache name="sso">
+                    <locking isolation="REPEATABLE_READ"/>
+                    <transaction mode="BATCH"/>
+                </local-cache>
+                <local-cache name="routing"/>
+            </cache-container>
+            <cache-container name="ejb" aliases="sfsb" default-cache="passivation" module="org.wildfly.clustering.ejb.infinispan">
+                <local-cache name="passivation">
+                    <locking isolation="REPEATABLE_READ"/>
+                    <transaction mode="BATCH"/>
+                    <file-store passivation="true" purge="false"/>
+                </local-cache>
+            </cache-container>
+            <cache-container name="hibernate" module="org.infinispan.hibernate-cache">
+                <local-cache name="entity">
+                    <heap-memory size="10000"/>
+                    <expiration max-idle="100000"/>
+                </local-cache>
+                <local-cache name="local-query">
+                    <heap-memory size="10000"/>
+                    <expiration max-idle="100000"/>
+                </local-cache>
+                <local-cache name="timestamps"/>
+            </cache-container>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:io:3.0">
+            <worker name="default"/>
+            <buffer-pool name="default"/>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:jaxrs:2.0"/>
+        <subsystem xmlns="urn:jboss:domain:jca:5.0">
+            <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
+            <bean-validation enabled="true"/>
+            <default-workmanager>
+                <short-running-threads>
+                    <core-threads count="50"/>
+                    <queue-length count="50"/>
+                    <max-threads count="50"/>
+                    <keepalive-time time="10" unit="seconds"/>
+                </short-running-threads>
+                <long-running-threads>
+                    <core-threads count="50"/>
+                    <queue-length count="50"/>
+                    <max-threads count="50"/>
+                    <keepalive-time time="10" unit="seconds"/>
+                </long-running-threads>
+            </default-workmanager>
+            <cached-connection-manager/>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:jmx:1.3">
+            <expose-resolved-model/>
+            <expose-expression-model/>
+            <remoting-connector/>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:jpa:1.1">
+            <jpa default-datasource="" default-extended-persistence-inheritance="DEEP"/>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
+            <web-context>auth</web-context>
+            <providers>
+                <provider>
+                    classpath:${jboss.home.dir}/providers/*
+                </provider>
+            </providers>
+            <master-realm-name>master</master-realm-name>
+            <scheduled-task-interval>900</scheduled-task-interval>
+            <theme>
+                <staticMaxAge>2592000</staticMaxAge>
+                <cacheThemes>true</cacheThemes>
+                <cacheTemplates>true</cacheTemplates>
+                <welcomeTheme>${env.KEYCLOAK_WELCOME_THEME:keycloak}</welcomeTheme>
+                <default>${env.KEYCLOAK_DEFAULT_THEME:keycloak}</default>
+                <dir>${jboss.home.dir}/themes</dir>
+            </theme>
+            <spi name="eventsStore">
+                <provider name="jpa" enabled="true">
+                    <properties>
+                        <property name="exclude-events" value="[&quot;REFRESH_TOKEN&quot;]"/>
+                    </properties>
+                </provider>
+            </spi>
+            <spi name="userCache">
+                <provider name="default" enabled="true"/>
+            </spi>
+            <spi name="userSessionPersister">
+                <default-provider>jpa</default-provider>
+            </spi>
+            <spi name="timer">
+                <default-provider>basic</default-provider>
+            </spi>
+            <spi name="connectionsHttpClient">
+                <provider name="default" enabled="true"/>
+            </spi>
+            <spi name="connectionsJpa">
+                <provider name="default" enabled="true">
+                    <properties>
+                        <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
+                        <property name="initializeEmpty" value="true"/>
+                        <property name="migrationStrategy" value="update"/>
+                        <property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/>
+                    </properties>
+                </provider>
+            </spi>
+            <spi name="realmCache">
+                <provider name="default" enabled="true"/>
+            </spi>
+            <spi name="connectionsInfinispan">
+                <default-provider>default</default-provider>
+                <provider name="default" enabled="true">
+                    <properties>
+                        <property name="cacheContainer" value="java:jboss/infinispan/container/keycloak"/>
+                    </properties>
+                </provider>
+            </spi>
+            <spi name="jta-lookup">
+                <default-provider>${keycloak.jta.lookup.provider:jboss}</default-provider>
+                <provider name="jboss" enabled="true"/>
+            </spi>
+            <spi name="publicKeyStorage">
+                <provider name="infinispan" enabled="true">
+                    <properties>
+                        <property name="minTimeBetweenRequests" value="10"/>
+                    </properties>
+                </provider>
+            </spi>
+            <spi name="x509cert-lookup">
+                <default-provider>${keycloak.x509cert.lookup.provider:default}</default-provider>
+                <provider name="default" enabled="true"/>
+            </spi>
+            <spi name="hostname">
+                <default-provider>${keycloak.hostname.provider:default}</default-provider>
+                <provider name="default" enabled="true">
+                    <properties>
+                        <property name="frontendUrl" value="${keycloak.frontendUrl:}"/>
+                        <property name="forceBackendUrlToFrontendUrl" value="false"/>
+                    </properties>
+                </provider>
+                <provider name="fixed" enabled="true">
+                    <properties>
+                        <property name="hostname" value="${keycloak.hostname.fixed.hostname:localhost}"/>
+                        <property name="httpPort" value="${keycloak.hostname.fixed.httpPort:-1}"/>
+                        <property name="httpsPort" value="${keycloak.hostname.fixed.httpsPort:-1}"/>
+                        <property name="alwaysHttps" value="${keycloak.hostname.fixed.alwaysHttps:false}"/>
+                    </properties>
+                </provider>
+            </spi>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:mail:4.0">
+            <mail-session name="default" jndi-name="java:jboss/mail/Default">
+                <smtp-server outbound-socket-binding-ref="mail-smtp"/>
+            </mail-session>
+        </subsystem>
+        <subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0"/>
+        <subsystem xmlns="urn:wildfly:microprofile-health-smallrye:2.0" security-enabled="false" empty-liveness-checks-status="${env.MP_HEALTH_EMPTY_LIVENESS_CHECKS_STATUS:UP}" empty-readiness-checks-status="${env.MP_HEALTH_EMPTY_READINESS_CHECKS_STATUS:UP}"/>
+        <subsystem xmlns="urn:wildfly:microprofile-metrics-smallrye:2.0" security-enabled="false" exposed-subsystems="*" prefix="${wildfly.metrics.prefix:wildfly}"/>
+        <subsystem xmlns="urn:jboss:domain:naming:2.0">
+            <remote-naming/>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:remoting:4.0">
+            <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:request-controller:1.0"/>
+        <subsystem xmlns="urn:jboss:domain:security:2.0">
+            <security-domains>
+                <security-domain name="other" cache-type="default">
+                    <authentication>
+                        <login-module code="Remoting" flag="optional">
+                            <module-option name="password-stacking" value="useFirstPass"/>
+                        </login-module>
+                        <login-module code="RealmDirect" flag="required">
+                            <module-option name="password-stacking" value="useFirstPass"/>
+                        </login-module>
+                    </authentication>
+                </security-domain>
+                <security-domain name="jboss-web-policy" cache-type="default">
+                    <authorization>
+                        <policy-module code="Delegating" flag="required"/>
+                    </authorization>
+                </security-domain>
+                <security-domain name="jaspitest" cache-type="default">
+                    <authentication-jaspi>
+                        <login-module-stack name="dummy">
+                            <login-module code="Dummy" flag="optional"/>
+                        </login-module-stack>
+                        <auth-module code="Dummy"/>
+                    </authentication-jaspi>
+                </security-domain>
+                <security-domain name="jboss-ejb-policy" cache-type="default">
+                    <authorization>
+                        <policy-module code="Delegating" flag="required"/>
+                    </authorization>
+                </security-domain>
+            </security-domains>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:security-manager:1.0">
+            <deployment-permissions>
+                <maximum-set>
+                    <permission class="java.security.AllPermission"/>
+                </maximum-set>
+            </deployment-permissions>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:transactions:5.0">
+            <core-environment node-identifier="${jboss.tx.node.id:1}">
+                <process-id>
+                    <uuid/>
+                </process-id>
+            </core-environment>
+            <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
+            <coordinator-environment statistics-enabled="${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
+            <object-store path="tx-object-store" relative-to="jboss.server.data.dir"/>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:undertow:11.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
+            <buffer-cache name="default"/>
+            <server name="default-server">
+                <http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" enable-http2="true"/>
+                <https-listener name="https" socket-binding="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" security-realm="ApplicationRealm" enable-http2="true"/>
+                <host name="default-host" alias="localhost">
+                    <location name="/" handler="welcome-content"/>
+                    <http-invoker security-realm="ApplicationRealm"/>
+                </host>
+            </server>
+            <servlet-container name="default">
+                <jsp-config/>
+                <websockets/>
+            </servlet-container>
+            <handlers>
+                <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
+            </handlers>
+        </subsystem>
+        <subsystem xmlns="urn:jboss:domain:weld:4.0"/>
+    </profile>
+    <interfaces>
+        <interface name="management">
+            <inet-address value="${jboss.bind.address.management:[::1]}"/>
+        </interface>
+        <interface name="public">
+            <inet-address value="${jboss.bind.address:[::]}"/>
+        </interface>
+    </interfaces>
+    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
+        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
+        <socket-binding name="http" port="${jboss.http.port:8080}"/>
+        <socket-binding name="https" port="${jboss.https.port:8443}"/>
+        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
+        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
+        <socket-binding name="txn-recovery-environment" port="4712"/>
+        <socket-binding name="txn-status-manager" port="4713"/>
+        <outbound-socket-binding name="mail-smtp">
+            <remote-destination host="${jboss.mail.server.host:localhost}" port="${jboss.mail.server.port:25}"/>
+        </outbound-socket-binding>
+    </socket-binding-group>
+</server>
diff --git a/solution/integration/smo/oam/.env b/solution/integration/smo/oam/.env
new file mode 100644 (file)
index 0000000..15e585a
--- /dev/null
@@ -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 (executable)
index 0000000..14550a0
--- /dev/null
@@ -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 (file)
index 0000000..0146e6b
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFPjCCAyagAwIBAgIJAJ6u7cCnzrWdMA0GCSqGSIb3DQEBCwUAMCwxDjAMBgNV\r
+BAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzAeFw0xODA0MDUx\r
+NDE1MjhaFw0zODAzMzExNDE1MjhaMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQK\r
+DARPTkFQMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC\r
+ggIBAMA5pkgRs7NhGG4ew5JouhyYakgYUyFaG121+/h8qbSdt0hVQv56+EA41Yq7\r
+XGie7RYDQK9NmAFF3gruE+6X7wvJiChp+Cyd7sFMnb65uWhxEdxWTM2BJFrgfzUn\r
+H8ZCxgaCo3XH4PzlKRy2LQQJEJECwl/RZmRCXijMt5e9h8XoZY/fKkKcZZUsWNCM\r
+pTo266wjvA9MXLmdgReRj0+vrCjrNqy+htwJDztoiHWiYPqT6o8EvGcgjNqjlZx7\r
+NUNf8MfLDByqKF6+wRbHv1GKjn3/Vijd45Fv8riyRYROiFanvbV6jIfBkv8PZbXg\r
+2VDWsYsgp8NAvMxK+iV8cO+Ck3lBI2GOPZbCEqpPVTYbLUz6sczAlCXwQoPzDIZY\r
+wYa3eR/gYLY1gP2iEVHORag3bLPap9ZX5E8DZkzTNTjovvLk8KaCmfcaUMJsBtDd\r
+ApcUitz10cnRyZc1sX3gE1f3DpzQM6t9C5sOVyRhDcSrKqqwb9m0Ss04XAS9FsqM\r
+P3UWYQyqDXSxlUAYaX892u8mV1hxnt2gjb22RloXMM6TovM3sSrJS0wH+l1nznd6\r
+aFXftS/G4ZVIVZ/LfT1is4StoyPWZCwwwly1z8qJQ/zhip5NgZTxQw4mi7ww35DY\r
+PdAQOCoajfSvFjqslQ/cPRi/MRCu079heVb5fQnnzVtnpFQRAgMBAAGjYzBhMB0G\r
+A1UdDgQWBBRTVTPyS+vQUbHBeJrBKDF77+rtSTAfBgNVHSMEGDAWgBRTVTPyS+vQ\r
+UbHBeJrBKDF77+rtSTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAN\r
+BgkqhkiG9w0BAQsFAAOCAgEAPx/IaK94n02wPxpnYTy+LVLIxwdq/kawNd6IbiMz\r
+L87zmNMDmHcGbfoRCj8OkhuggX9Lx1/CkhpXimuYsZOFQi5blr/u+v4mIbsgbmi9\r
+7j+cUHDP0zLycvSvxKHty51LwmaX9a4wkJl5zBU4O1sd/H9tWcEmwJ39ltKoBKBx\r
+c94Zc3iMm5ytRWGj+0rKzLDAXEWpoZ5bE5PLJauA6UDCxDLfs3FwhbS7uDggxYvf\r
+jySF5FCNET94oJ+m8s7VeHvoa8iPGKvXrIqdd7XDHnqJJlVKr7m9S0fMbyEB8ci2\r
+RtOXDt93ifY1uhoEtEykn4dqBSp8ezvNMnwoXdYPDvTd9uCAFeWFLVreBAWxd25h\r
+PsBTkZA5hpa/rA+mKv6Af4VBViYr8cz4dZCsFChuioVebe9ighrfjB//qKepFjPF\r
+CyjzKN1u0JKm/2x/ORqxkTONG8p3uDwoIOyimUcTtTMv42bfYD88RKakqSFXE9G+\r
+Z0LlaKABqfjK49o/tsAp+c5LoNlYllKhnetO3QAdraHwdmC36BhoghzR1jpX751A\r
+cZn2VH3Q4XKyp01cJNCJIrua+A+bx6zh3RyW6zIIkbRCbET+UD+4mr8WIcSE3mtR\r
+ZVlnhUDO4z9//WKMVzwS9Rh8/kuszrGFI1KQozXCHLrce3YP6RYZfOed79LXaRwX\r
+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 (file)
index 0000000..1195a12
--- /dev/null
@@ -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: <No 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 (file)
index 0000000..04bc849
--- /dev/null
@@ -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/oam/sdnr/devicemanager.properties b/solution/integration/smo/oam/sdnr/devicemanager.properties
new file mode 100644 (file)
index 0000000..152e2a6
--- /dev/null
@@ -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/oam/sdnr/oauth-provider.config.json b/solution/integration/smo/oam/sdnr/oauth-provider.config.json
new file mode 100644 (file)
index 0000000..9f608f5
--- /dev/null
@@ -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 (file)
index 0000000..c48f348
--- /dev/null
@@ -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/tmux-logging.py b/solution/integration/tmux-logging.py
new file mode 100755 (executable)
index 0000000..770ea7f
--- /dev/null
@@ -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()