Policy Docker Usage

Starting the ONAP Policy Framework Docker Containers

In order to start the containers, you can use docker-compose. This uses the docker-compose.yml yaml file to bring up the ONAP Policy Framework. This file is located in the policy/docker repository. In the csit folder there are scripts to automatically bring up components in Docker, without the need to build all the images locally.

Clone the read-only version of policy/docker repo from gerrit:

git clone "https://gerrit.onap.org/r/policy/docker"

The docker compose structure

After cloning the docker repository, the scripts and compose files are under the compose/ folder.

docker
  compose
    config -- all the components configurations
    metrics -- configuration for Prometheus server and Grafana dashboards
    docker-compose.gui.yml -- compose file with gui services
    docker-compose.yml -- compose file with policy components services, including simulator, prometheus and grafana
    export-ports.sh -- script to export the http ports for all components and where the images are collected from
    get-versions.sh -- script to get the latest SNAPSHOT version of images based on branch (master is default)
    start-compose.sh -- script to start the containers / applications
    stop-compose.sh -- script to stop the containers / applications
    wait_for_port.sh -- helper script to allow some wait time before an application is completely up and running

Start the containers automatically

Assuming all the scripts are being executed from the compose folder.

To start all components without Policy GUI:

./start-compose.sh

To start all components with Policy GUI:

./start-compose.sh --gui

To start all components with Grafana dashboards and Prometheus server:

./start-compose.sh --grafana

You now have a full standalone ONAP Policy framework up and running!

To stop all containers, use stop-compose.sh

./stop-compose.sh

Building the ONAP Policy Framework Docker Images

If you want to use your own local images, you can build them following these instructions:

Step 1: Build the Policy API Docker image

cd ~/git/onap/policy/api/packages
mvn clean install -P docker

Step 2: Build the Policy PAP Docker image

cd ~/git/onap/policy/pap/packages
mvn clean install -P docker

Step 3: Build the Drools PDP docker image.

This image is a standalone vanilla Drools engine, which does not contain any pre-built drools rules or applications.

cd ~/git/onap/policy/drools-pdp/
mvn clean install -P docker

Step 4: Build the Drools Application Control Loop image.

This image has the drools use case application and the supporting software built together with the Drools PDP engine. It is recommended to use this image if you are first working with ONAP Policy and wish to test or learn how the use cases work.

cd ~/git/onap/policy/drools-applications
mvn clean install -P docker

Step 5: Build the Apex PDP docker image:

cd ~/git/onap/policy/apex-pdp
mvn clean install -P docker

Step 6: Build the XACML PDP docker image:

cd ~/git/onap/policy/xacml-pdp/packages
mvn clean install -P docker

Step 7: Build the Policy SDC Distribution docker image:

cd ~/git/onap/policy/distribution/packages
mvn clean install -P docker

Step 8: Build the Policy Message Router Simulator

cd ~/git/onap/policy/models/models-sim/packages
mvn clean install -P docker

Start the containers manually

Step 1: Set the containers location and project.

For local images, set CONTAINER_LOCATION=””, located at the export-ports.sh script You will need to build locally all the images using the steps in the previous section

For remote images set CONTAINER_LOCATION=”nexus3.onap.org:10001/”

Step 2: Set gerrit branch

By default, the start-compose.sh script will use the get-versions.sh to bring up latest SNAPSHOT version. To use a different branch, edit the variable GERRIT_BRANCH located at the start of get-versions.sh to the branch needed.

Step 3: Get all the images versions

Use the script get-versions.sh

source ./get-versions.sh

Step 4: Run the system using the start-compose.sh script

./start-compose.sh <component> [--grafana] [--gui]

The <component> input is any of the policy components available:

  • api

  • pap

  • apex-pdp

  • distribution

  • drools-pdp

  • drools-applications

  • xacml-pdp

  • policy-acm-runtime

Debugging docker containers

To debug code against docker compose, the java parameters for jmxremote needs to be added to the start script in the component.

Example: For Policy PAP, edit the policy-pap.sh script:

vi ~git/onap/policy/pap/packages/policy-pap-docker/src/main/docker/policy-pap.sh

Before the -jar /app/pap.jar line, add the following block:

-Dcom.sun.management.jmxremote.rmi.port=5005 \
-Dcom.sun.management.jmxremote=true \
-Dcom.sun.management.jmxremote.port=5005 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.local.only=false \

On docker-compose.yml compose file, add to the port section the mapping 5005.

pap:
image: ${CONTAINER_LOCATION}onap/policy-pap:${POLICY_PAP_VERSION}
container_name: policy-pap
depends_on:
  - mariadb
  - simulator
  - api
hostname: policy-pap
ports:
  - ${PAP_PORT}:6969
  - 5005:5005

That should allow an IDE to connect remotely to the 5005 port. Follow the instructions of the IDE being used to add a remote connection.

For Intellij, under Run/Debug Configurations, add a new Remote JVM Debug, point Use module classpath to the <component>-main sub-project.