New Delhi - Run
This page describes how to get the New-Delhi release version of A1-Policy functions up and running using Docker.
The A1 Policy Management Service and the (optional) A1-enabled Controller (SDNC with A1-Adapter) will run in a local demonstrative deployment with four near-RT-RIC A1 simulator instances (docker containers). These simulators will be configured to emulate devices implementing either the "OSC_2.1.0" version or "STD_2.0.0" version of the O-RAN A1 interface. (For more information on the OSC A1 Simulator functions see OSC NONRTRIC Wiki page (Release J)
All components run as docker containers and communicate via a private docker network. Details of the architecture can be found from "New Delhi" Release page.
Note: Version numbers used in these pages may not be the most recent ... you should verify the latest version numbers for released pre-built components in the docker image repository (https://nexus3.onap.org)
References to branches in Gerrit/Github may not be the most recent ... you should verify if the equivalent content in later branches might be more appropriate.
Some links to files/folders in Gerrit may also be broken … you should locate the equivalent content in the relevant Github mirrored content instead
- 1 Project Requirements
- 2 Create Configuration for A1 Policy Management Service
- 3 Running the functions
- 3.1 Run A1-enabled Controller
- 3.2 Run OSC Near-RT-RIC/A1 Simulator Docker Containers
- 3.3 Run ONAP A1 Policy Management Service Docker Container
- 3.4 Check A1-Policy types and Status of the simulated near-RT-RICs
- 3.5 Create some A1-Policy instances using CURL
- 3.6 Run OSC Non-RT RIC Control Panel Docker Container
Project Requirements
Java 17 (make sure that JAVA_HOME environment variable points to correct Java version)
Maven 3.8+ (make sure you have configured maven to access the ONAP maven repositories)
Docker and docker-compose (latest)
Create Configuration for A1 Policy Management Service
Configure the A1 Policy Management Service
To support local test with four separate near-RT-RIC simulator instances:
Copy the default configuration file oran/a1-policy-management/config/application_configuration.json (newdelhi) to the current directory, then replace/amend the configuration with the sample demo configuration below.
(Note the configuration below is just a sample, and should be updated to match particular deployments.
The deployment below assumes 4 near-RT-RICs exist - addressable at the URLs given.
See the step "Run OSC Near-RT-RIC/A1 Simulator Docker Containers" below)The
controllerURL(hostname, port),usernameandpasswordvalues to access the A1 Controller (SDNC + A1 Adapter) must match the values configured for the SDNC-A1-Controller. (See the step "Run A1 Controller" further below). The port number for http here is 8181.
(Note the configuration below is just a sample, and should be updated to match particular deployments.
The deployment below assumes an A1 Controller function (SDNC) exists - addressable at the url given, using the authentication credentials given.)Any defined
richost names values (in thenameandbaseUrlparameters for eachricentry) must match the given docker container names in near-RT-RIC simulator startup.
Here the port the simulator's internal port 8085, for http or 8185 for https.Note: The A1 Policy Management service can entirely by-pass the A1-Controller (SDNC + A1 Adapter) if desired - it is optional to access the near-RT-RIC through an A1-Controller/SDNC. (See 'Alternative' below)
Sample application configuration
Sample: application_configuration.json
{
"description": "Application configuration",
"config": {
"controller": [
{
"name": "controller1",
"baseUrl": "http://sdnc_controller:8181",
"userName": "admin",
"password": "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U"
}
],
"ric": [
{
"name": "ric1",
"baseUrl": "http://ric1:8085/",
"managedElementIds": [
]
},
{
"name": "ric2",
"baseUrl": "http://ric2:8085/",
"managedElementIds": [
"kista_3",
"kista_4"
]
},
{
"name": "ric3",
"baseUrl": "http://ric3:8085/",
"controller": "controller1",
"managedElementIds": [
"kista_5",
"kista_6"
]
},
{
"name": "ric4",
"baseUrl": "http://ric4:8085/",
"controller": "controller1",
"managedElementIds": [
"kista_7",
"kista_8",
"kista_9",
"kista_10",
"kista_11"
]
}
]
}
}Alternative: Bypass the A1-Controller - connect direct from A1-Policy Management Service
There is no functional gain in accessing the near-RT-RIC through an A1-Controller.
To bypass the A1-Controller (SDNC + A1 Adapter), where the A1-Policy Management Service connects directly to the A1 Interface:
In the configuration the "
controller" property is optional in the "ric" objects. Remove this entry to by-pass SDNC/A1-Adapter.If all configured
rics bypass the A1-Controller (do not have "controller" values) then the "controller" object at the top of the configuration can be omitted.If all configured
rics bypass the A1-Controller there is no need to start an A1-Controller (SDNC + A1 Adapter).
JSON Schema for the application configuration
The configuration must comply to the following JSON schema. There are several publicly available tools (e.g. online) where it is possible to validate JSON objects against their schema.
The schema is available in the gerrit repo (application_configuration_schema.json (newdelhi))
For more information on configuring the A1-Policy Management Service please see New Delhi - Component configuration
Running the functions
Note: Version numbers used in this page may not be the most recent ... you should verify the latest version numbers for released pre-built components in the docker image repository (https://nexus3.onap.org), and check the version number in appropriate POM files if building manually.
Component | Release image and version tag | Staging images and version tag | Manual snapshot (only available if manually built) |
|---|---|---|---|
A1 Policy Management Service | nexus3.onap.org:10002/onap/ccsdk-oran-a1policymanagementservice:1.7.2 | nexus3.onap.org:10004/onap/ccsdk-oran-a1policymanagementservice:1.7.3-STAGING-latest | onap/ccsdk-oran-a1policymanagementservice:1.7.3-SNAPSHOT |
SDNC image | nexus3.onap.org:10002/onap/sdnc-image:2.6.1 | nexus3.onap.org:10004/onap/sdnc-image:2.8.0-STAGING-latest | onap/sdnc-image:2.8.0-SNAPSHOT |
Run A1-enabled Controller
Alternative: Bypass the A1-Controller - connect direct from A1-Policy Management Service
If you choose to bypass the A1-Controller (SDNC + A1-Adapter), there is no need to start it, so you can skip this step.
To use the A1 Controller function (SDNC + A1-Adapter) you need to run the SDNC docker image. This image has few other docker image dependencies but not all are important for A1 Policy functions. To run a cut-down SDNC container for A1 Policy testing a number of the unneeded services can be removed from the docker compose file. (It is often difficult to get a full SDNC deployment up & running; removing unneeded components makes this easier)
Download and edit the docker compose file, oam/installation/src/main/yaml/docker-compose.yaml (newdelhi) and keep only sdnc and maria db images. The rest of the images are not needed for A1 Policy testing.
In addition, remove or comment out the following two entries for sdnc in the docker-compose file: '- ansible' and '- ansible:ansiblehost'.
(However if you want to change the SLI DG graphs or run your own SLI DG graphs, then keep the dgbuilder image.)
If you have built the images locally you don't need any other change, however if the images have not been built locally, versions should be modified, from latest to the version that you would like to use, for example: nexus3.onap.org:10002/onap/sdnc-image:2.6.0
|
|
|---|---|
|
|
There is also a file named docker configuration sdnc-basic.yml (Gerrit - montreal) that can be used instead, it only includes maria db and sdnc so it only needs to be modified when images have not been built locally so versions need to be updated from latest to a specific version, for example nexus3.onap.org:10002/onap/sdnc-image:2.6.0. In this case when using a different docker compose file you will use docker-compose -f sdnc-basic.yml up instead of the normal docker-compose up command in the code block below)