...
Note:The optional A1 Policy Management Service DMaaP interface is deprecated so this interface shall no longer be configured in the application_configuration.json.
Start the container with the following command. Replace "<absolute-path-to-file>" with the the path to the created configuration file in the command. The configuration file is mounted to the container. There will be WARN messages appearing in the log until the simulators are started.
|
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.
...
This step is only applicable if the configuration for the Policy Management Service include the SDNC A1 Controller (second config option), see Run the Policy Management Service Docker Container.
Create the docker compose file - be sure to update image for the a1controller to the one listed for SDNC A1 Controller in the table on the top of this page.
docker-compose.yamlStart the SNDC A1 controller with the following command, using the created docker-compose file.
Code Block | ||
---|---|---|
|
...
Open this url in a web browser to verify that the SDNC A1 Controller is up and running. It may take a few minutes until the url is available.
http://localhost:8282/apidoc/explorer/index.html#/controller%20A1-ADAPTER-API
Username/password: admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
The Karaf logs of A1 controller can be followed e.g. by using command
...
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.
Ric1
...
Ric2
...
Ric3
...
docker run --rm --network=nonrtric-docker-net -p
8087:8085 -p 8187:8185 -e A1_VERSION=STD_2.0.0 -e ALLOW_HTTP=
true
--name=ric3 nexus3.o-ran-sc.org:10002
/o-ran-sc/a1-simulator
:2.4.0
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".
...
curl localhost:8081
/a1-policy/v2/rics
Expected output - all state should indicated AVAILABLE:
...
{
"rics"
:[{
"ric_id"
:
"ric1"
,
"managed_element_ids"
:[
"kista_1"
,
"kista_2"
],
"policytype_ids"
:[],
"state"
:
"AVAILABLE"
},{
"ric_id"
:
"ric3"
,
"managed_element_ids"
:[
"kista_5"
,
"kista_6"
],
"policytype_ids"
:[],
"state"
:
"AVAILABLE"
},{
"ric_id"
:
"ric2"
,
"managed_element_ids"
:[
"kista_3"
,
"kista_4"
],
"policytype_ids"
:[
""
],
"state"
:
"AVAILABLE"
}]}
| |
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.4.2
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" |
Start the SNDC A1 controller with the following command, using the created docker-compose file.
|
Open this url in a web browser to verify that the SDNC A1 Controller is up and running. It may take a few minutes until the url is available.
http://localhost:8282/apidoc/explorer/index.html#/controller%20A1-ADAPTER-API
Username/password: admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
The Karaf logs of A1 controller can be followed e.g. by using command
|
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.
Ric1
|
Ric2
|
Ric3
|
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".
|
Expected output - all state should indicated AVAILABLE:
|
The simulators using version STD_2.0.0 and OSC_2.1.0 supports policy types. Run the commands below to add one policy types in ric1 and ric3.
Create the file with policy type for ric1
Code Block | ||||
---|---|---|---|---|
| ||||
{
"name": "pt1",
"description": "pt1 policy type",
"policy_type_id": 1,
"create_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "OSC_PT1_0.1.0",
|
The simulators using version STD_2.0.0 and OSC_2.1.0 supports policy types. Run the commands below to add one policy types in ric1 and ric3.
Create the file with policy type for ric1
Code Block | ||||
---|---|---|---|---|
| ||||
{
"name": "pt1",
"description": "pt1 policy type",
"policy_type_id": 1,
"create_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "OSC_PT1_0.1.0",
"description": "QoS policy type",
"type": "object",
"properties": {
"scope": {
"type": "object",
"properties": {
"ueId": {
"type": "string"
},
"qosId": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"ueId",
"qosId"
]
},
"statement": {
"type": "object",
"properties": {
"priorityLevel": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"priorityLevel"
]
}
}
}
} |
...
Code Block | ||||
---|---|---|---|---|
| ||||
{ "policySchema": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "STD_QOS_0_2_0", "description": "STD QOS policy type", "type": "object", "properties": { "scope": { "type": "object", "properties": { "ueId": { "type": "string" }, "qosId": { "type": "string" } }, "additionalProperties": false, "required": [ "ueId", "qosId" ] }, "qosObjectives": {": { "type": "object", "properties": { "priorityLevel": { "type": "number" } }, "typeadditionalProperties": "object"false, "propertiesrequired": {[ "priorityLevel": { ] "type": "number" } } }, "statusSchema": { }"$schema": "http://json-schema.org/draft-07/schema#", "additionalPropertiestitle": false"STD_QOS_0.2.0", "description": "STD QOS policy type "required": [ status", "type": "object", "priorityLevelproperties": { "enforceStatus": { ] }"type": "string" }, }, "statusSchemaenforceReason": { "$schema": "http://json-schema.org/draft-07/schema#", "titletype": "STD_QOS_0.2.0",string" "description": "STD QOS policy type status", }, "typeadditionalProperties": "object"false, "propertiesrequired": {[ "enforceStatus": { "type": "string" ] }, "enforceReason": { "type": "string" }, "additionalProperties": false, "required": [ "enforceStatus" ] } } } |
Put the policy type to ric3 - should return http response code 201
...
curl -X PUT -v -H Content-Type:application/json http://localhost:8087/policytype?id=std_pt1 --data-binary @std_pt1.json
}
} |
Put the policy type to ric3 - should return http response code 201
|
Wait one minute to let the policy management service synchronise the types with the simulators.
List the synchronised types.
|
Expected output:
|
Run the Information Coordinator Service Docker Container
Run the following command to start the information coordinator service.
|
Verify that the Information Coordinator Service is started and responding (response is an empty array).
|
Expected output:
|
For troubleshooting/verification purposes you can view/access the full swagger API from url: http://localhost:8083/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config
Run the Non-RT RIC Gateway and Control Panel Docker Container
The Gateway exposes the interfaces of the Policy Management Service and the Information Coordinator Service to a single port of the gateway. This single port is then used by the control panel to access both services.
Create the config file for the gateway.
Code Block | ||||
---|---|---|---|---|
| ||||
server:
port: 9090
spring:
cloud:
gateway:
httpclient:
ssl:
useInsecureTrustManager: true
wiretap: true
httpserver:
wiretap: true
routes:
- id: A1-Policy
uri: https://policy-agent-container:8433
predicates:
- Path=/a1-policy/**
- id: A1-EI-P
uri: https://information-service-container:8434 |
Wait one minute to let the policy management service synchronise the types with the simulators.
List the synchronised types.
...
curl localhost:8081
/a1-policy/v2/policy-types
Expected output:
...
{
"policytype_ids"
:[
""
,
"123"
,
"std_pt1"
]}
Run the Information Coordinator Service Docker Container
Run the following command to start the information coordinator service.
...
docker run --rm --network=nonrtric-docker-net -p 8083:8083 -p 8434:8434 --name=information-service-container nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-plt-informationcoordinatorservice:1.4.0
Verify that the Information Coordinator Service is started and responding (response is an empty array).
...
curl localhost:8083
/data-producer/v1/info-types
Expected output:
|
For troubleshooting/verification purposes you can view/access the full swagger API from url: http://localhost:8083/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config
Run the Non-RT RIC Gateway and Control Panel Docker Container
The Gateway exposes the interfaces of the Policy Management Service and the Information Coordinator Service to a single port of the gateway. This single port is then used by the control panel to access both services.
Create the config file for the gateway.
Code Block | ||||
---|---|---|---|---|
| ||||
server: port: 9090 spring: cloud: gateway: httpclient: sslpredicates: - Path=/data-producer/** - useInsecureTrustManagerid: trueA1-EI-C wiretap: true uri: https://information-service-container:8434 httpserverpredicates: wiretap: true - Path=/data-consumer/** management: endpoint: routesgateway: - idenabled: A1-Policytrue endpoints: uri: https://policy-agent-container:8433web: predicatesexposure: - Path=/a1-policy/** include: "gateway,loggers,logfile,health,info,metrics,threaddump,heapdump" logging: level: - idROOT: A1-EI-PERROR org.springframework: ERROR uri: https://information-service-container:8434org.springframework.cloud.gateway: INFO reactor.netty: INFO predicatesfile: - Path=/data-producer/** - id: A1-EI-C uri: https://information-service-container:8434 predicates: - Path=/data-consumer/** management: endpoint: gateway: enabled: true endpoints: web: exposure: include: "gateway,loggers,logfile,health,info,metrics,threaddump,heapdump" logging: level: ROOT: ERROR org.springframework: ERROR org.springframework.cloud.gateway: INFO reactor.netty: INFO file: name: /var/log/nonrtric-gateway/application.log |
Run the following command to start the gateway. Replace "<absolute-path-to-file>" with the the path to the created application.yaml.
...
docker run --rm --network=nonrtric-docker-net --name=nonrtric-gateway -v <absolute-path-to-config-
file
>/application.yaml:/opt/app/nonrtric-gateway/config/application.yaml -p 9090:9090 nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-gateway:1.0.0
Run the following two commands to check that the services can be reached through the gateway
...
curl localhost:9090
/a1-policy/v2/rics
Expected output
...
{
"rics"
:[{
"ric_id"
:
"ric1"
,
"managed_element_ids"
:[
"kista_1"
,
"kista_2"
],
"policytype_ids"
:[
"123"
],
"state"
:
"AVAILABLE"
},{
"ric_id"
:
"ric3"
,
"managed_element_ids"
:[
"kista_5"
,
"kista_6"
],
"policytype_ids"
:[
"std_pt1"
],
"state"
:
"AVAILABLE"
},{
"ric_id"
:
"ric2"
,
"managed_element_ids"
:[
"kista_3"
,
"kista_4"
],
"policytype_ids"
:[
""
],
"state"
:
"AVAILABLE"
}]}
name: /var/log/nonrtric-gateway/application.log |
Run the following command to start the gateway. Replace "<absolute-path-to-file>" with the the path to the created application.yaml.
|
Run the following two commands to check that the services can be reached through the gateway
|
Expected output
|
Second command:
|
Expected output:
|
Create the config file for the control panel.
Code Block | ||||
---|---|---|---|---|
| ||||
events{}
http {
include /etc/nginx/mime.types;
resolver 127.0.0.11;
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location /a1-policy/ {
set $upstream nonrtric-gateway;
proxy_pass http://$upstream:9090;
}
location /data-producer/ {
set $upstream nonrtric-gateway;
proxy_pass http://$upstream:9090;
}
location /data-consumer/ {
set $upstream nonrtric-gateway;
proxy_pass http://$upstream:9090;
}
location / {
try_files $uri $uri/ /index.html;
}
}
} |
Second command:
...
curl localhost:9090
/data-producer/v1/info-types
Expected output:
|
Create the config file for the control panel.
nginx.conf
Run the following command to start the control panel. Replace "<absolute-path-to-file>" with the the path to the created nginx.conf.
|
The webbased UI can be accessed by pointing the web-browser to this URL:
...
Start the App Catalogue Service by the following command.
|
...