Copy of Release E - This page describes how to get the release F version of Non-RT RIC up and running locally with three separate A1 simulator (previously called Near-RT RIC A1 simulator Interface) docker containers providing STD_1.1.3, STD_2.0.0 and OSC_2.1.0 versions of the A1 interface.
...
The run commands throughout this page uses the release images and tags. Replace the release images/tags in the container run commands in the instructions if manually-built snapshot images are desired.
F Maintenance Release images
(components marked with * is not released in E)Release image and version tag | Manual snapshot (only available if manually built) and version tag | Image | Tag |
---|
A1 Policy Management Service | nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-a1policymanagementservice |
:3a1policymanagementservice:2informationcoordinatorservice | 1.3.1 |
-SNAPSHOTNear-RT RIC A1 Simulatora1simulator:2Information Coordinator Service | o-ran-sc/a1-simulator:latest | plt-informationcoordinatorservice:2.1/nonrtric-plt-informationcoordinatorservice:1.2.1-SNAPSHOTNon-RT RIC Control Panelcontrolpanel:2.3/nonrtric-controlpanel:2.3.0-SNAPSHOTSDNC A1-Controller | nexus3.onaponap/sdnc-image:2.2.3Use release version | Gateway*o-ran-sc/nonrtric-plt-dmaapadapter | 1.1.1 |
DMaaP Mediator | nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt- |
gateway:0/nonrtric-gateway:1.1.0-SNAPSHOTApp Catalogue Service*.org:10002/o-ran-sc/nonrtric-plt-helmmanager | 1.2.0 |
Auth Token Fetcher | nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt- |
rappcatalogue:1.0.2o-ran-sc/nonrtric-plt-rappcatalogue:2-SNAPSHOTHelm Managerplthelmmanager:Dmaap Mediator Producer | o-ran-sc/nonrtric-plt-helmmanager:1.1.1-SNAPSHOT | dmaapmediatorproducer:plt-rapp-ransliceassurance-icsversion |
1Not applicable (Set as parameter for docker build ) | Dmaap Adaptor Serviceplt-dmaapadaptor:.1plt-dmaapadaptor:1.0.1-SNAPSHOT ...
rapp-orufhrecovery-consumer | 1.1.0 |
Note: A version of this table appears Integration&Testing - E Release - E F Release Docker Image List - NONRTRIC (EF-Release). This is the authoritive authoritative version!
Ports
The following ports will be allocated and exposed to localhost for each component. If other port(s) are desired, then the ports need to be replaced in the container run commands in the instructions further below.
...
Component | Port exposed to localhost (http/https) |
---|
A1 Policy Management Service | 8081/8443 |
A1 Simulator (previously called Near-RT RIC A1 SimulatorInterface) | 8085/8185, 8086/8186, 8087/8187 |
Information Coordinator Service | 8083/8434 |
Non-RT RIC Control Panel | 8080/8880 |
SDNC A1-Controller | 8282/8443 |
Gateway | 9090 (only http) |
App Catalogue Service | 8680/8633 |
Helm Manager | 8112 (only http) |
Dmaap Mediator Producer | 9085/9185 |
Dmaap Adaptor Adapter Service | 9087/9187 |
Note: A version of this table appears Integration&Testing - E Release - E Release Docker Image List - NONRTRIC (E-Release). This is the authoritive version!
Prerequisites
The containers need to be connected to docker network in order to communicate with each other.
...
To support local test with three separate A1 simulator (previously called Near-RT RIC A1 simulator Interface) instances, each running a one of the three available A1 Policy interface versions:
- Create an application_configuration.json file with the configuration below. This will configure the policy management service to use the simulators for the A1 interface
- Note: Any defined ric names must match the given docker container names in near-RT RIC simulator startup, see Run the A1 (previously called Near-RT RIC A1 Interface) Simulator Docker Containers
- The application supports both REST and DMAAP interface. REST is always enabled but to enable DMAAP (message exchange via message-router) additional config is needed. The examples below uses REST over http.
...
To enable the also the optional DMAAP DMaaP interface, add the following config (same level as the "ric" entry) to application_configuration.json.
Be sure to update http/host/port below to match the configuration of the used message router.match the configuration of the used message router.
Info |
---|
title | A1 Policy Management Service DMaaP interface is deprecated |
---|
|
Note: The DMaaP interface for the A1 Policy Management Service is now deprecated |
Code Block |
---|
language | yml |
---|
title | optional dmaap config in application_configuration.json |
---|
collapse | true |
---|
|
...
"streams_publishes": {
"dmaap_publisher": {
"type": "message-router",
"dmaap_info": {
"topic_url": "http://dmaap-mr:3904/events/A1-POLICY-AGENT-WRITE"
}
}
},
"streams_subscribes": {
"dmaap_subscriber": {
"type": "message-router",
"dmaap_info": {
"topic_url": "http://dmaap-mr:3904/events/A1-POLICY-AGENT-READ/users/policy-agent?timeout=15000&limit=100"
}
}
},
... |
...
Code Block |
---|
|
docker run --rm -v <absolute-path-to-file>/application_configuration.json:/opt/app/policy-agent/data/application_configuration.json -p 8081:8081 -p 8433:8433 --network=nonrtric-docker-net --name=policy-agent-container nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-a1policymanagementservice:2.34.1 |
Wait 1 minute to allow the container to start and to read the configuration. Then run the command below another terminal. The output should match the configuration in the file - all three rics (ric1, ric2 and ric3) should be included in the output. Note that each ric has the state "UNAVAILABLE" until the simulators are started.
...
Expected output (not that all simulators - ric1,ric2 and ric3 will indicate "state":"UNAVAILABLE" until the simulators has been started in Run the A1 (previously called Near-RT RIC A1 Interface) Simulator Docker Containers):
...
Code Block |
---|
language | text |
---|
title | docker-compose.yaml |
---|
collapse | true |
---|
|
version: '3'
networks:
default:
external: true
name: nonrtric-docker-net
services:
db:
image: nexus3.o-ran-sc.org:10001/mariadb:10.5
container_name: sdncdb
networks:
- default
ports:
- "3306"
environment:
- MYSQL_ROOT_PASSWORD=itsASecret
- MYSQL_ROOT_HOST=%
- MYSQL_USER=sdnctl
- MYSQL_PASSWORD=gamma
- MYSQL_DATABASE=sdnctl
logging:
driver: "json-file"
options:
max-size: "30m"
max-file: "5"
a1controller:
image: nexus3.onap.org:10002/onap/sdnc-image:2.3.2.3
depends_on :
- db
container_name: a1controller
networks:
- default
entrypoint: ["/opt/onap/sdnc/bin/startODL.sh"]
ports:
- 8282:8181
- 8443:8443
links:
- db:dbhost
- db:sdnctldb01
- db:sdnctldb02
environment:
- MYSQL_ROOT_PASSWORD=itsASecret
- MYSQL_USER=sdnctl
- MYSQL_PASSWORD=gamma
- MYSQL_DATABASE=sdnctl
- SDNC_CONFIG_DIR=/opt/onap/sdnc/data/properties
- SDNC_BIN=/opt/onap/sdnc/bin
- ODL_CERT_DIR=/tmp
- ODL_ADMIN_USERNAME=admin
- ODL_ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
- ODL_USER=admin
- ODL_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
- SDNC_DB_INIT=true
- A1_TRUSTSTORE_PASSWORD=a1adapter
- AAI_TRUSTSTORE_PASSWORD=changeit
logging:
driver: "json-file"
options:
max-size: "30m"
max-file: "5" |
...
Code Block |
---|
|
docker exec a1controller sh -c "tail -f /opt/opendaylight/data/log/karaf.log" |
Run the A1 Simulator (previously called Near-RT RIC A1
...
Interface) Docker Containers
Start a simulator for each ric defined in in the application_configuration.json created in Run the Policy Management Service Docker Container. Each simulator will use one of the currently available A1 interface versions.
...
Code Block |
---|
|
docker run --rm -p 8085:8085 -p 8185:8185 -e A1_VERSION=OSC_2.1.0 -e ALLOW_HTTP=true --network=nonrtric-docker-net --name=ric1 nexus3.o-ran-sc.org:10002/o-ran-sc/a1-simulator:2.23.01 |
Ric2
Code Block |
---|
|
docker run --rm -p 8086:8085 -p 8186:8185 -e A1_VERSION=STD_1.1.3 -e ALLOW_HTTP=true --network=nonrtric-docker-net --name=ric2 nexus3.o-ran-sc.org:10002/o-ran-sc/a1-simulator:2.23.01 |
Ric3
Code Block |
---|
|
docker run --rm -p 8087:8085 -p 8187:8185 -e A1_VERSION=STD_2.0.0 -e ALLOW_HTTP=true --network=nonrtric-docker-net --name=ric3 nexus3.o-ran-sc.org:10002/o-ran-sc/a1-simulator:2.23.01 |
Wait at least one minute to let the policy management service synchronise the rics. Then run the command below another terminal. The output should match the configuration in the file. Note that each ric now has the state "AVAILABLE".
...
Code Block |
---|
|
docker run --rm -p 8083:8083 -p 8434:8434 --network=nonrtric-docker-net --name=information-service-container nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-informationplt-coordinator-serviceinformationcoordinatorservice:1.23.1 |
Verify that the Information Coordinator Service is started and responding (response is an empty array).
...
Code Block |
---|
|
docker run --rm -p 8680:8680 -p 8633:8633 --network=nonrtric-docker-net --name=rapp-catalogue-service nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-rappcatalogue:1.1.0.2 |
Verify that the service is up and running
...
Note: Access to kubernetes is required as stated the requirements on the top of this page.
Change dir to Download the 'helm-manger' in the downloaded nonrtric reporepo, Helm Manager.
Code Block |
---|
|
$ cd helmmanager
$ mkdir <path-repos>/nonrtric/helm-managerp mnt/database
$ kubectl create ns chkm |
Start the helm manger in a separate shell by the following command:
Code Block |
---|
|
docker run \
--rm \
-it \
-p 8112:8083 \
--name helmmanagerservice \
--network nonrtric-docker-net \
-v $(pwd)/mnt/database:/var/helm-manager-service \
-v ~/.kube:/roothome/nonrtric/.kube \
-v ~/.helm:/home/rootnonrtric/.helm \
-v ~/.config/helm:/home/rootnonrtric/.config/helm \
-v ~/.cache/helm:/home/rootnonrtric/.cache/helm \
-v $(pwd)/config/application.yaml:/etc/app/helm-manager/application.yaml \
nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-helmmanager:1.12.10 |
Make sure the app has started by listing the current charts - response should be empty json array.
Code Block |
---|
|
$ curl localhosthttp://helmadmin:itisasecret@localhost:8112/helm/charts
{"charts":[]} |
...
As an alternative, run the script 'test.sh' to execute a full sequence of commands.
Code Block |
---|
|
$ ./test.sh docker
Start test
================
Get apps - empty
================
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[]}
================
Add repo
================
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/repo -X POST -H Content-Type:application/json -d @cm-repo.json
Curl OK
Response: 201
Body:
============
Onboard app
===========
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/onboard/chart -X POST -F chart=@simple-app-0.1.0.tgz -F values=@simple-app-values.yaml -F info=<simple-app.json
Curl OK
Response: 200
Body:
=====================
Get apps - simple-app
=====================
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[{"releaseName":"simpleapp","chartId":{"name":"simple-app","version":"0.1.0"},"namespace":"ckhm","repository":{"repoName":"cm","protocol":null,"address":null,"port":null,"userName":null,"password":null},"overrideParams":null}]}
===========
Install app
===========
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/install -X POST -H Content-Type:application/json -d @simple-app-installation.json
Curl OK
Response: 201
Body:
=====================
Get apps - simple-app
=====================
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[{"releaseName":"simpleapp","chartId":{"name":"simple-app","version":"0.1.0"},"namespace":"ckhm","repository":{"repoName":"cm","protocol":null,"address":null,"port":null,"userName":null,"password":null},"overrideParams":null}]}
=================================================================
helm ls to list installed app - simpleapp chart should be visible
=================================================================
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
simpleapp ckhm 1 20212022-1206-1427 1021:1418:3027.917334268407666475 +0000 UTC deployed simple-app-0.1.0 1.16.0
==========================================
sleep 30 - give the app some time to start
==========================================
============================
List svc and pod of the app
============================
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
simpleapp-simple-app ClusterIP 10.9698.30120.250189 <none> 80/TCP 30s
NAME READY STATUS RESTARTS AGE
simpleapp-simple-app-675f44fc99-mpvndqsxr6 1/1 Running 0 31s30s
========================
Uninstall app simple-app
========================
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/uninstall/simple-app/0.1.0 -X DELETE
Curl OK
Response: 204
Body:
===========================================
sleep 30 - give the app some time to remove
===========================================
============================================================
List svc and pod of the app - should be gone or terminating
============================================================
No resources found in ckhm namespace.
No resources found in ckhm namespace.
=====================
Get apps - simple-app
=====================
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[{"releaseName":"simpleapp","chartId":{"name":"simple-app","version":"0.1.0"},"namespace":"ckhm","repository":{"repoName":"cm","protocol":null,"address":null,"port":null,"userName":null,"password":null},"overrideParams":null}]}
============
Delete chart
===========
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/chart/simple-app/0.1.0 -X DELETE
Curl OK
Response: 204
Body:
================
Get apps - empty
================
curl -sw %{http_code} http://helmadmin:itisasecret@localhost:8112/helm/charts
Curl OK
Response: 200
Body: {"charts":[]}
Test result All tests ok
End of test
|
To run in the helm manager in kubernetes see this page: Run Helm Manager in kubernetes
Run the Dmaap
...
Adapter Service Docker Container
The Dmaap Adaptor Adapter Service needs two configurations files, one for the application specific parameters and one for the types the application supports.
...
Code Block |
---|
language | bash |
---|
title | application.yaml |
---|
collapse | true |
---|
|
spring:
profiles:
active: prod
main:
allow-bean-definition-overriding: true
aop:
auto: false
management:
endpoints:
web:
exposure:
# Enabling of springboot actuator features. See springboot documentation.
include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
springdoc:
show-actuator: true
logging:
# Configuration of logging
level:
ROOT: ERROR
org.springframework: ERROR
org.springframework.data: ERROR
org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
org.oran.dmaapadapter: INFO
file:
name: /var/log/dmaap-adaptoradapter-service/application.log
server:
# Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
# See springboot documentation.
port : 8435
http-port: 8084
ssl:
key-store-type: JKS
key-store-password: policy_agent
key-store: /opt/app/dmaap-adaptoradapter-service/etc/cert/keystore.jks
key-password: policy_agent
key-alias: policy_agent
app:
webclient:
# Configuration of the trust store used for the HTTP client (outgoing requests)
# The file location and the password for the truststore is only relevant if trust-store-used == true
# Note that the same keystore as for the server is used.
trust-store-used: false
trust-store-password: policy_agent
trust-store: /opt/app/dmaap-adaptoradapter-service/etc/cert/truststore.jks
# Configuration of usage of HTTP Proxy for the southbound accesses.
# The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
http.proxy-host:
http.proxy-port: 0
ics-base-url: https://information-service-container:8434
# Location of the component configuration file. The file will only be used if the Consul database is not used;
# configuration from the Consul will override the file.
configuration-filepath: /opt/app/dmaap-adaptoradapter-service/data/application_configuration.json
dmaap-base-url: https://message-router:3905
# The url used to address this component. This is used as a callback url sent to other components.
dmaap-adapter-base-url: https://dmaapadapterservice:8435
# KAFKA boostrap server. This is only needed if there are Information Types that uses a kafkaInputTopic
kafka:
bootstrap-servers: message-router-kafka:9092 |
...
Code Block |
---|
language | bash |
---|
title | application_configuration.json with kafka type |
---|
|
{
"types": [
{
"id": "ExampleInformationType",
"dmaapTopicUrl": "/events/unauthenticated.dmaapadp.json/dmaapadapterproducer/msgs?timeout=15000&limit=100",
"useHttpProxy": false
},
{
"id": "ExampleInformationTypeKafka",
"kafkaInputTopic": "unauthenticated.dmaapadp_kafka.text",
"useHttpProxy": false
}
]
} |
Start the Dmaap Adaptor Adapter Service in a separate shell with the following command:
Code Block |
---|
|
docker run --rm \
-v <absolute-path-to-config-file>/application.yaml:/opt/app/dmaap-adaptoradapter-service/config/application.yaml \
-v <absolute-path-to-config-file>/application_configuration.json:/opt/app/dmaap-adaptoradapter-service/data/application_configuration.json \
-p 9086:8084 -p 9087:8435 --network=nonrtric-docker-net --name=dmaapadapterservice nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-dmaapadaptordmaapadapter:1.01.1 |
Setup jobs to produce data according to the types in application_configuration.json
...
Code Block |
---|
|
curl -k -X PUT -H Content-Type:application/json https://localhost:80838434/data-consumer/v1/info-jobs/job1 --data-binary @job1.json |
Check that the job has been enabled - job accepted by the Dmaap Adaptor Adapter Service
Code Block |
---|
|
curl -k https://informationservicelocalhost:8434/A1-EI/v1/eijobs/job1/status
{"eiJobStatus":"ENABLED"} |
...
Code Block |
---|
|
curl -k -X PUT -H Content-Type:application/json https://localhost:80838434/data-consumer/v1/info-jobs/job1job2 --data-binary @job2.json |
Check that the job has been enabled - job accepted by the Dmaap Adaptor Adapter Service
Code Block |
---|
|
curl -k https://informationservicelocalhost:8434/A1-EI/v1/eijobs/job2/status
{"eiJobStatus":"ENABLED"} |
...
Code Block |
---|
|
docker run --rm -v \
<absolute-path-to-config-file>/type_config.json:/configs/type_config.json \
-p 80858885:8085 -p 81858985:8185 --network=nonrtric-docker-net --name=dmaapmediatorservice \
-e "INFO_COORD_ADDR=https://informationserviceinformation-service-container:8434" \
-e "DMAAP_MR_ADDR=https://message-router:3905" \
-e "LOG_LEVEL=Debug" \
-e "INFO_PRODUCER_HOST=https://dmaapmediatorservice" \
-e "INFO_PRODUCER_PORT=8185" \
nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-dmaapmediatorproducer:1.
1.0.1 |
Setup jobs to produce data according to the types in type_config.json
...
Check that the job has been enabled - job accepted by the Dmaap Adaptor Adapter Service
Code Block |
---|
|
curl -k https://informationservicelocalhost:8434/A1-EI/v1/eijobs/job3/status
{"eiJobStatus":"ENABLED"} |
...