Versions Compared

Key

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

...

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.

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.45.10

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.yaml Expand sourceStart the SNDC A1 controller with the following command, using the created docker-compose file.


Code Block
titledocker-compose

...

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"}]}

.yaml
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.

docker-compose up


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 

dockerexeca1controller 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

docker run --rm --network=nonrtric-docker-net -p 8085:8085 -p 8185:8185 -e A1_VERSION=OSC_2.1.0 -e ALLOW_HTTP=true--name=ric1 nexus3.o-ran-sc.org:10002/o-ran-sc/a1-simulator:2.4.0

Ric2

docker run --rm --network=nonrtric-docker-net -p 8086:8085 -p 8186:8185 -e A1_VERSION=STD_1.1.3 -e ALLOW_HTTP=true--name=ric2 nexus3.o-ran-sc.org:10002/o-ran-sc/a1-simulator:2.4.0

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"}]}

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
titleosc_pt1.json
collapsetrue
{
  "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
titleosc_pt1.json
collapsetrue
{
  "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
titlestd_pt1.json
collapsetrue
{
    "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

curl -X PUT -v -H Content-Type:application/json http://localhost:8087/policytype?id=std_pt1  --data-binary @std_pt1.json 

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
titleapplication.yaml 
collapsetrue
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
titleapplication.yaml 
collapsetrue
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.

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"}]}

Second command:

curl localhost:9090/data-producer/v1/info-types

Expected output:

[ ]


Create the config file for the control panel.

Code Block
titlenginx.conf
collapsetrue
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 Expand source

Run the following command to start the control panel. Replace "<absolute-path-to-file>" with the the path to the created nginx.conf.

docker run --rm  -p8080:8080 --network=nonrtric-docker-net --name=control-panel -v   <absolute-path-to-config-file>/nginx.conf:/etc/nginx/nginx.conf -p 8080:8080 --network=nonrtric-docker-net --name=control-panel  nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-controlpanel:2.34.0

The webbased UI can be accessed by pointing the web-browser to this URL: 

...

Start the App Catalogue Service by the following command.

docker run --rm   -p8680: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

...