Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

Component
(components marked with * is not released in E)Release image and version tagManual snapshot (only available if manually built)
and version tag
ImageTag
A1 Policy Management Service

nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-a1policymanagementservice

:

2.
3
4.1
Information Coordinator Service nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-
a1policymanagementservice:2
informationcoordinatorservice1.3.1
-SNAPSHOTNear-RT RIC A1 Simulator
NONRTRIC Control Panel

nexus3.o-ran-sc.org:10002/o-ran-sc/

a1

nonrtric-

simulator:

controlpanel

2.
2Information Coordinator Service
3.0

o-ran-sc/a1-simulator:latest

Gateway
nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-
plt-informationcoordinatorservice:
gateway 1.
2.1
0.0
A1-Simulator

nexus3.

o-ran-sc

/nonrtric-plt-informationcoordinatorservice:1.2.1-SNAPSHOTNon-RT RIC Control Panel

.org:10002/o-ran-sc/a1-simulator

2.3.1

R-APP Catalogue

nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric

-controlpanel:2.3.0

-plt-rappcatalogue

1.1.0
DMaaP Adapternexus3.
o-ran-sc
/nonrtric-controlpanel:2.3.0-SNAPSHOTSDNC A1-Controllernexus3
.
onap.
org:10002/
onap/sdnc-image:2.2.3Use release versionGateway*
o-ran-sc/nonrtric-plt-dmaapadapter1.1.1
DMaaP Mediatornexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-
gateway:
dmaapmediatorproducer1.
0
1.0
Helm Managernexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-
gateway:
plt-helmmanager1.
1
2.0
-SNAPSHOTApp Catalogue Service*1.0.2o-ran-sc/nonrtric-plt-rappcatalogue:
Auth Token Fetchernexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-
rappcatalogue:
auth-token-fetch
1.0.
2-SNAPSHOTHelm Manager
0
O-DU Slice Assurancenexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-
plt
rapp-
helmmanager:Dmaap Mediator Producer
ransliceassurance1.1.1
o-ran-sc/nonrtric-plt-helmmanager:1.1.1-SNAPSHOT
O-DU Slice Assurancenexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-rapp-
plt
ransliceassurance-
dmaapmediatorproducer:
icsversion1.0.
1Not applicable (Set as parameter for docker build)Dmaap Adaptor Service
0
O-RU FH Recoverynexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-
plt-
rapp-orufhrecovery1.1.0
O-RU FH Recoverynexus3.o-ran-sc.org:10002/
dmaapadaptor:1.0.1
o-ran-sc/nonrtric-rapp-
plt
orufhrecovery-
dmaapadaptor:
consumer1.
0.
1
-SNAPSHOT

...

.0

Note: A version of this table appears Integration&Testing - E F Release - E 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.

...

ComponentPort 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

Gateway9090 (only http)
App Catalogue Service8680/8633
Helm Manager8112 (only http)
Dmaap Mediator Producer9085/9185
Dmaap Adaptor Adapter Service

9087/9187

...


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.

Info
titleA1 Policy Management Service DMaaP interface is deprecated
Note: The DMaaP interface for the A1 Policy Management Service is now deprecated


Code Block
languageyml
titleoptional dmaap config in application_configuration.json
collapsetrue
  ...
  "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
languagebash
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
languagetext
titledocker-compose.yaml
collapsetrue
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
languagebash
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
languagebash
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
languagebash
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
languagebash
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
languagebash
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-plt-informationcoordinatorservice:1.23.1


Verify that the Information Coordinator Service is started and responding (response is an empty array).

...

Code Block
languagebash
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

...

Code Block
languagebash
$ cd helmmanager

$ mkdir -p mnt/database

$ kubectl create ns chkm

Start the helm manger in a separate shell by the following command:

Code Block
languagebash
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
languagebash
$ 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
languagebash
$ ./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
languagebash
titleapplication.yaml
collapsetrue
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
languagebash
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
languagebash
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
languagebash
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
languagebash
curl -k https://informationservicelocalhost:8434/A1-EI/v1/eijobs/job1/status
{"eiJobStatus":"ENABLED"}

...

Code Block
languagebash
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
languagebash
curl -k https://informationservicelocalhost:8434/A1-EI/v1/eijobs/job2/status
{"eiJobStatus":"ENABLED"}

...

Code Block
languagebash
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
languagebash
curl -k https://informationservicelocalhost:8434/A1-EI/v1/eijobs/job3/status
{"eiJobStatus":"ENABLED"}

...