X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=solution%2FREADME.md;h=036b803495245f0b1b8043fb43317840574037b8;hb=refs%2Fheads%2Fmaster;hp=1bd4e4b3d2b8b904ae7710bd3dc782060f3aa334;hpb=77f826994a1d3624c9afe8274284c1a17e2d9b16;p=oam.git diff --git a/solution/README.md b/solution/README.md index 1bd4e4b..036b803 100644 --- a/solution/README.md +++ b/solution/README.md @@ -24,8 +24,7 @@ with the following components. * **Controller** single node instance ... representing the NETCONF consumer on the Service Management and - Orchestration framework (SMO) for the O1 interface based on - ODL. + Orchestration framework (SMO) for O-RAN O1 interface and/or O-RAN OpenFronthaul Management Plane and/or other NETCONF/YANG schemas implemented by the OpenDaylight project. * **VES collector** @@ -36,24 +35,71 @@ with the following components. ## Prerequisites +### Resources + +The solution was tested on a VM with + +- 4x Core +- 16 GBit RAM +- 50 Gbit Storage + +### Operating (HOST) System + ``` $ cat /etc/os-release | grep PRETTY_NAME -PRETTY_NAME="Ubuntu 22.04.1 LTS" +PRETTY_NAME="Ubuntu 22.04.2 LTS" +``` + +### Docker +``` $ docker --version -Docker version 20.10.12, build 20.10.12-0ubuntu4 +Docker version 23.0.1, build a5ee5b1 +``` +Please follow the required docker daemon configuration as documented in the following README.md: +- [./smo/common/docker/README.md](./smo/common/docker/README.md) + +### Docker Compose -$ docker-compose version -docker-compose version 1.29.2, build unknown -docker-py version: -CPython version: 3.10.6 -OpenSSL version: OpenSSL 3.0.2 15 Mar 2022 +``` +$ docker compose version +Docker Compose version v2.17.2 +``` +### GIT +``` $ git --version git version 2.34.1 +``` + +### Python + +``` +$ python3 --version +Python 3.10.6 +``` + +A python parser package is required. +``` +sudo apt install python3-pip +pip install jproperties +``` + +It is beneficial (but not mandatory) adding the following line add the +end of your ~/.bashrc file. I will suppress warnings when python script +do not verify self signed certificates for HTTPS communication. ``` +export PYTHONWARNINGS="ignore:Unverified HTTPS request" +``` + +### ETC Host (DNS function) + +Please change in the different .env files the environment variable 'HOST_IP' +to the IP address of the system where you deploy the solution - search for +'aaa.bbb.ccc.ddd' and replace it. + Please modify the /etc/hosts of your system. * \: is the hostname of the system, where the browser is started @@ -69,106 +115,16 @@ $ cat /etc/hosts # SMO OAM development system smo.o-ran-sc.org - gateway.smo.o-ran-sc.org + gateway.smo.o-ran-sc.org identity.smo.o-ran-sc.org messages.smo.o-ran-sc.org - ves-collector.oam.smo.o-ran-sc.org + kafka-bridge.smo.o-ran-sc.org odlux.oam.smo.o-ran-sc.org - controller.oam.smo.o-ran-sc.org - -``` - -It is beneficial (but not mandatory) adding the following line add the -end of your ~/.bashrc file. I will suppress warnings when python script -do not verify self signed certificates for HTTPS communication. - -``` -export PYTHONWARNINGS="ignore:Unverified HTTPS request" -``` + flows.oam.smo.o-ran-sc.org + tests.oam.smo.o-ran-sc.org + controller.dcn.smo.o-ran-sc.org + ves-collector.dcn.smo.o-ran-sc.org -Please ensure that you download and copy the required 3GPP OpenAPIs for VES-stndDefined -message validation into the folder './solution/operation-and-maintenance/smo/oam/ves-collector/externalRepo'. - -Please follow the instructions in ./solution/operation-and-maintenance/smo/oam/ves-collector/externalRepo/3gpp/rep/sa5/MnS/blob/Rel16/OpenAPI/README.md. - -The following tree shows the successfully tested folder structure. It combines different versions of the schemas ('Rel16' and 'SA88-Rel16') using 3GPP branch names. - -``` -$ tree solution/operation-and-maintenance/smo/oam/ves-collector/externalRepo/ -solution/operation-and-maintenance/smo/oam/ves-collector/externalRepo/ -├── 3gpp -│   └── rep -│   └── sa5 -│   └── MnS -│   └── blob -│   ├── Rel16 -│   │   └── OpenAPI -│   │   ├── README.md -│   │ ├── TS28532_FaultMnS.yaml -│   │ ├── TS28532_FileDataReportingMnS.yaml -│   │ ├── TS28532_HeartbeatNtf.yaml -│   │ ├── TS28532_PerfMnS.yaml -│   │ ├── TS28532_ProvMnS.yaml -│   │ ├── TS28532_StreamingDataMnS.yaml -│   │ ├── TS28536_CoslaNrm.yaml -│   │ ├── TS28541_5GcNrm.yaml -│   │ ├── TS28541_NrNrm.yaml -│   │ ├── TS28541_SliceNrm.yaml -│   │ ├── TS28550_PerfMeasJobCtrlMnS.yaml -│   │ ├── TS28623_ComDefs.yaml -│   │ ├── TS28623_GenericNrm.yaml -│   │ ├── TS29512_Npcf_SMPolicyControl.yaml -│   │ ├── TS29514_Npcf_PolicyAuthorization.yaml -│   │ └── TS29571_CommonData.yaml -│   └── SA88-Rel16 -│   └── OpenAPI -│   ├── 5gcNrm.yaml -│   ├── PerDataFileReportMnS.yaml -│   ├── PerMeasJobCtlMnS.yaml -│   ├── PerThresMonMnS.yaml -│   ├── PerfDataStreamingMnS.yaml -│   ├── README.md -│   ├── comDefs.yaml -│   ├── coslaNrm.yaml -│   ├── faultMnS.yaml -│   ├── genericNrm.yaml -│   ├── heartbeatNtf.yaml -│   ├── nrNrm.yaml -│   ├── provMnS.yaml -│   ├── sliceNrm.yaml -│   └── streamingDataMnS.yaml -``` - -## Expected Folder Structure - -The following figure show the expected folder structure for the different -docker-compose file and its configurations. - -``` -├── network -│ ├── .env -│ ├── config.py -│ ├── docker-compose.yml -│ │ -│ ├── ntsim-ng-o-du -│ └── ntsim-ng-o-ru -└── smo - ├── common - │ ├── .env - │ ├── docker-compose.yml - │ │ - │ ├── messages - │ ├── docker - │ ├── identity - │ ├── kafka - │ └── zookeeper - └── oam - ├── .env - ├── docker-compose.yml - │ - ├── odlux - ├── controller - └── ves-collector ``` ## Usage @@ -181,18 +137,16 @@ The following commands should be invoked. More detailed can be found in the next chapters. ``` -docker-compose -f smo/common/docker-compose.yml up -d -# wait until the cpu load is low again +docker compose -f smo/common/docker-compose.yaml up -d python smo/common/identity/config.py -docker-compose -f smo/oam/docker-compose.yml up -d -docker-compose -f smo/apps/docker-compose.yml up -d +docker compose -f smo/oam/docker-compose.yaml up -d +docker compose -f smo/apps/docker-compose.yaml up -d # wait until the cpu load is low again -docker-compose -f network/docker-compose.yml up -d -# wait about 2min -docker restart ntsim-ng-o-du-1122 +docker compose -f network/docker-compose.yaml up -d +docker compose -f network/docker-compose.yaml restart ntsim-ng-o-du-1122 ntsim-ng-o-du-1123 python network/config.py ``` @@ -209,10 +163,10 @@ nano network/.env 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: +The several docker-compose yaml files must be started in the right order as listed below: ``` -docker-compose -f smo/common/docker-compose.yml up -d +docker compose -f smo/common/docker-compose.yaml up -d python smo/common/identity/config.py ``` @@ -221,7 +175,7 @@ A system user (%USER) is also created with administration rights. ``` -docker-compose -f smo/oam/docker-compose.yml up -d +docker compose -f smo/oam/docker-compose.yaml up -d ``` Looking into the ONAP SDN-R logs will give you the startup procedure. @@ -233,20 +187,20 @@ docker logs -f controller If you see the login page (https://odlux.oam.smo.o-ran-sc.org) you are good to go and can start the (simulated) network. ``` -docker-compose -f network/docker-compose.yml up -d +docker compose -f network/docker-compose.yaml 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 +docker compose -f network/docker-compose.yaml 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 +O-RU - NETCONF Call HOME and NETCONF notifications +O-DU - 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") @@ -281,13 +235,21 @@ docker logs -f ves-collector #### Access to SDN-R ODLUX -##### Login into SDN-R - https://odlux.oam.smo.o-ran-sc.org - User: admin // see .env file + User: admin + + Password: // see .env file + +In case of trouble, please update the commands with your customized '.env' file. + +#### Access to Node Red Flows + + https://flows.oam.smo.o-ran-sc.org - Password: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U + User: admin + + Password: // see .env file In case of trouble, please update the commands with your customized '.env' file. @@ -296,10 +258,10 @@ In case of trouble, please update the commands with your customized '.env' file. To stop all container please respect the following order ``` -docker-compose -f network/docker-compose.yml down -docker-compose -f smo/apps/docker-compose.yml down -docker-compose -f smo/oam/docker-compose.yml down -docker-compose -f smo/common/docker-compose.yml down +docker compose -f network/docker-compose.yaml down +docker compose -f smo/apps/docker-compose.yaml down +docker compose -f smo/oam/docker-compose.yaml down +docker compose -f smo/common/docker-compose.yaml down ``` ### Cleanup @@ -320,3 +282,81 @@ The commands ... docker ps -a docker-compose ps docker rm -f $(docker ps -aq) + +## Commands in action + +``` +$ docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" +NAMES IMAGE STATUS +$ docker compose -f smo/common/docker-compose.yaml up -d +[+] Running 9/9 + ✔ Network smo Created 0.1s + ✔ Network dmz Created 0.1s + ✔ Container zookeeper Started 1.6s + ✔ Container persistence Started 1.5s + ✔ Container identitydb Started 1.2s + ✔ Container gateway Healthy 12.1s + ✔ Container kafka Started 2.2s + ✔ Container identity Started 13.4s + ✔ Container messages Started 13.4s +$ python3 smo/common/identity/config.py +Got token! +User leia.organa created! +User r2.d2 created! +User luke.skywalker created! +User jargo.fett created! +User role jargo.fett supervision created! +User role leia.organa administration created! +User role luke.skywalker provision created! +User role r2.d2 administration created! +$ docker compose -f smo/oam/docker-compose.yaml up -d +[+] Running 4/4 + ✔ Network oam Created 0.1s + ✔ Container controller Healthy 83.4s + ✔ Container ves-collector Started 1.2s + ✔ Container odlux Started 84.0s +$ docker compose -f smo/apps/docker-compose.yaml up -d +WARN[0000] Found orphan containers ([odlux controller ves-collector]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up. +[+] Running 1/1 + ✔ Container flows Started 0.9s +$ docker compose -f network/docker-compose.yaml up -d +WARN[0000] Found orphan containers ([flows odlux controller ves-collector]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up. +[+] Running 6/6 + ✔ Container ntsim-ng-o-du-1123 Started 2.6s + ✔ Container ntsim-ng-o-ru-11223 Started 2.2s + ✔ Container ntsim-ng-o-ru-11221 Started 1.9s + ✔ Container ntsim-ng-o-ru-11224 Started 1.9s + ✔ Container ntsim-ng-o-du-1122 Started 2.4s + ✔ Container ntsim-ng-o-ru-11222 Started 2.3s +$ docker compose -f network/docker-compose.yaml restart ntsim-ng-o-du-1122 ntsim-ng-o-du-1123 +[+] Running 2/2 + ✔ Container ntsim-ng-o-du-1122 Started 2.8s + ✔ Container ntsim-ng-o-du-1123 Started 2.9s +$ python3 network/config.py +Set O-RU-11221 True +Set O-RU-11224 True +Set O-RU-11222 True +Set O-DU-1123 True +Set O-DU-1122 True +Set O-RU-11223 True +$ docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" +NAMES IMAGE STATUS +ntsim-ng-o-ru-11221 nexus3.o-ran-sc.org:10004/o-ran-sc/nts-ng-o-ran-ru-fh:1.6.2 Up 4 minutes +ntsim-ng-o-ru-11224 nexus3.o-ran-sc.org:10004/o-ran-sc/nts-ng-o-ran-ru-fh:1.6.2 Up 4 minutes +ntsim-ng-o-ru-11222 nexus3.o-ran-sc.org:10004/o-ran-sc/nts-ng-o-ran-ru-fh:1.6.2 Up 4 minutes +ntsim-ng-o-du-1123 o-ran-sc/nts-ng-o-ran-du-rel-18:1.6.2 Up 54 seconds +ntsim-ng-o-du-1122 nexus3.o-ran-sc.org:10004/o-ran-sc/nts-ng-o-ran-du:1.6.2 Up About a minute +ntsim-ng-o-ru-11223 nexus3.o-ran-sc.org:10004/o-ran-sc/nts-ng-o-ran-ru-fh:1.6.2 Up 4 minutes +flows nodered/node-red:latest-configured Up 4 minutes (healthy) +odlux nexus3.onap.org:10001/onap/sdnc-web-image:2.4.2 Up 7 minutes +controller nexus3.onap.org:10001/onap/sdnc-image:2.4.2 Up 8 minutes (healthy) +ves-collector nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.10.1-configured Up 8 minutes (healthy) +messages nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18 Up 11 minutes +identity bitnami/keycloak:18.0.2 Up 11 minutes +kafka nexus3.onap.org:10001/onap/dmaap/kafka111:1.0.4 Up 11 minutes +zookeeper nexus3.onap.org:10001/onap/dmaap/zookeeper:6.0.3 Up 11 minutes +identitydb bitnami/postgresql:13 Up 11 minutes +persistence docker.elastic.co/elasticsearch/elasticsearch-oss:7.9.3 Up 11 minutes +gateway traefik:v2.9 Up 11 minutes (healthy) +$ +```