Policy Platform Development Tools

This article explains how to build the ONAP Policy Framework for development purposes and how to run stability/ performance tests for a variety of components. To start, the developer should consult the latest ONAP Wiki to familiarize themselves with developer best practices and how-tos to setup their environment, see https://wiki.onap.org/display/DW/Developer+Best+Practices.

This article assumes that:

  • You are using a *nix operating system such as linux or macOS.

  • You are using a directory called git off your home directory (~/git) for your git repositories

  • Your local maven repository is in the location ~/.m2/repository

  • You have copied the settings.xml from oparent to ~/.m2/ directory

  • You have added settings to access the ONAP Nexus to your M2 configuration, see Maven Settings Example (bottom of the linked page)

The procedure documented in this article has been verified to work on a MacBook laptop running macOS Mojave Version 10.14.6 and an Ubuntu 18.06 VM.

Cloning All The Policy Repositories

Run a script such as the script below to clone the required modules from the ONAP git repository. This script clones all the ONAP Policy Framework repositories.

ONAP Policy Framework has dependencies to the ONAP Parent oparent module, the ONAP ECOMP SDK ecompsdkos module, and the A&AI Schema module.

Typical ONAP Policy Framework Clone Script
  1 #!/usr/bin/env bash
  2
  3 ## script name for output
  4 MOD_SCRIPT_NAME=`basename $0`
  5
  6 ## the ONAP clone directory, defaults to "onap"
  7 clone_dir="onap"
  8
  9 ## the ONAP repos to clone
 10 onap_repos="\
 11 policy/parent \
 12 policy/common \
 13 policy/models \
 14 policy/docker \
 15 policy/api \
 16 policy/pap \
 17 policy/apex-pdp \
 18 policy/drools-pdp \
 19 policy/drools-applications \
 20 policy/xacml-pdp \
 21 policy/distribution \
 22 policy/clamp "
 23
 24 ##
 25 ## Help screen and exit condition (i.e. too few arguments)
 26 ##
 27 Help()
 28 {
 29     echo ""
 30     echo "$MOD_SCRIPT_NAME - clones all required ONAP git repositories"
 31     echo ""
 32     echo "       Usage:  $MOD_SCRIPT_NAME [-options]"
 33     echo ""
 34     echo "       Options"
 35     echo "         -d          - the ONAP clone directory, defaults to '.'"
 36     echo "         -h          - this help screen"
 37     echo ""
 38     exit 255;
 39 }
 40
 41 ##
 42 ## read command line
 43 ##
 44 while [ $# -gt 0 ]
 45 do
 46     case $1 in
 47         #-d ONAP clone directory
 48         -d)
 49             shift
 50             if [ -z "$1" ]; then
 51                 echo "$MOD_SCRIPT_NAME: no clone directory"
 52                 exit 1
 53             fi
 54             clone_dir=$1
 55             shift
 56         ;;
 57
 58         #-h prints help and exists
 59         -h)
 60             Help;exit 0;;
 61
 62         *)    echo "$MOD_SCRIPT_NAME: undefined CLI option - $1"; exit 255;;
 63     esac
 64 done
 65
 66 if [ -f "$clone_dir" ]; then
 67     echo "$MOD_SCRIPT_NAME: requested clone directory '$clone_dir' exists as file"
 68     exit 2
 69 fi
 70 if [ -d "$clone_dir" ]; then
 71     echo "$MOD_SCRIPT_NAME: requested clone directory '$clone_dir' exists as directory"
 72     exit 2
 73 fi
 74
 75 mkdir $clone_dir
 76 if [ $? != 0 ]
 77 then
 78     echo cannot clone ONAP repositories, could not create directory '"'$clone_dir'"'
 79     exit 3
 80 fi
 81
 82 for repo in $onap_repos
 83 do
 84     repoDir=`dirname "$repo"`
 85     repoName=`basename "$repo"`
 86
 87     if [ ! -z $dirName ]
 88     then
 89         mkdir "$clone_dir/$repoDir"
 90         if [ $? != 0 ]
 91         then
 92             echo cannot clone ONAP repositories, could not create directory '"'$clone_dir/repoDir'"'
 93             exit 4
 94         fi
 95     fi
 96
 97     git clone https://gerrit.onap.org/r/${repo} $clone_dir/$repo
 98 done
 99
100 echo ONAP has been cloned into '"'$clone_dir'"'

Execution of the script above results in the following directory hierarchy in your ~/git directory:

  • ~/git/onap

  • ~/git/onap/policy

  • ~/git/onap/policy/parent

  • ~/git/onap/policy/common

  • ~/git/onap/policy/models

  • ~/git/onap/policy/api

  • ~/git/onap/policy/pap

  • ~/git/onap/policy/docker

  • ~/git/onap/policy/drools-applications

  • ~/git/onap/policy/drools-pdp

  • ~/git/onap/policy/clamp

  • ~/git/onap/policy/apex-pdp

  • ~/git/onap/policy/xacml-pdp

  • ~/git/onap/policy/distribution

Building ONAP Policy Framework Components

Step 1: Optionally, for a completely clean build, remove the ONAP built modules from your local repository.

rm -fr ~/.m2/repository/org/onap

Step 2: A pom such as the one below can be used to build the ONAP Policy Framework modules. Create the pom.xml file in the directory ~/git/onap/policy.

Typical pom.xml to build the ONAP Policy Framework
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 2     <modelVersion>4.0.0</modelVersion>
 3     <groupId>org.onap</groupId>
 4     <artifactId>onap-policy</artifactId>
 5     <version>1.0.0-SNAPSHOT</version>
 6     <packaging>pom</packaging>
 7     <name>${project.artifactId}</name>
 8     <inceptionYear>2017</inceptionYear>
 9     <organization>
10         <name>ONAP</name>
11     </organization>
12
13     <modules>
14         <module>parent</module>
15         <module>common</module>
16         <module>models</module>
17         <module>api</module>
18         <module>pap</module>
19         <module>apex-pdp</module>
20         <module>xacml-pdp</module>
21         <module>drools-pdp</module>
22         <module>drools-applications</module>
23         <module>distribution</module>
24         <module>clamp</module>
25     </modules>
26 </project>

Policy Architecture/API Transition

In Dublin, a new Policy Architecture was introduced. The legacy architecture runs in parallel with the new architecture. It will be deprecated after Frankfurt release. If the developer is only interested in working with the new architecture components, the engine sub-module can be ommitted.

Step 3: You can now build the Policy framework.

Java artifacts only:

cd ~/git/onap
mvn clean install

With docker images:

cd ~/git/onap
mvn clean install -P docker

Developing and Debugging each Policy Component

Running the API component standalone

Assuming you have successfully built the codebase using the instructions above. The only requirement for the API component to run is a running Postgres database instance. The easiest way to do this is to run the docker image, please see the official documentation for the latest information on doing so. Once the database is up and running, a configuration file must be provided to the api in order for it to know how to connect to the database. You can locate the default configuration file in the packaging of the api component:

Default Policy API Configuration

You will want to change the fields pertaining to “host”, “port” and “databaseUrl” to your local environment settings and start the policy-api springboot application either using your IDE of choice or using the run goal from Spring Boot Maven plugin: mvn spring-boot:run.

Running the API component using Docker Compose

An example of running the api using a docker compose script is located in the Policy Integration CSIT test repository.

Policy CSIT Docker Compose

Running the PAP component standalone

Once you have successfully built the PAP codebase, a running Postgres database and Kafka instance will also be required to start up the application. To start database and Kafka, check official documentation on how to run an instance of each. After database and Kafka are up and running, a configuration file must be provided to the PAP component in order for it to know how to connect to the database and Kafka along with other relevant configuration details. You can locate the default configuration file in the packaging of the PAP component:

Default PAP Configuration

Update the fields related to database, Kafka and the RestServer for the application as per your local environment settings. Then to start the application, just run the Spring Boot application using IDE or command line.

Running the Smoke Tests

The following links contain instructions on how to run the smoke tests. These may be helpful to developers to become familiar with the Policy Framework components and test any local changes.

Running the Stability/Performance Tests

The following links contain instructions on how to run the S3P Stability and Performance tests. These may be helpful to developers to become familiar with the Policy Framework components and test any local changes.

Running the Pairwise Tests

The following links contain instructions on how to run the pairwise tests. These may be helpful to developers check that the Policy Framework works in a full ONAP deployment.

Running Continuous System and Integration Testing suites

Testing OpenSuse docker images

Policy Framework offers docker images in two flavors: Alpine and OpenSuse. Alpine images are used in OOM for ONAP deployments. The OpenSuse images are built manually if needed, by running Maven with the -Pdockersuse profile. To test these images, CSITs will be run.

  1. Build the OpenSuse image you want by running Maven with -Pdockersuse:

    cd policy/apex-pdp
    mvn clean install -Pdockersuse
    

    The image onap/policy-apex-pdp:latest will be produced.

  2. To avoid ambiguity, tag the image as opensuse:

    docker tag onap/policy-apex-pdp:latest onap/policy-apex-pdp:opensuse
    
  3. Clone policy/docker repo.

  4. Modify docker/csit/docker-compose.yml to use the tagged OpenSuse image.

    Replace:

    apex-pdp:
      image: nexus3.onap.org:10001/onap/policy-apex-pdp:${POLICY_APEX_PDP_VERSION}
    

    with:

    apex-pdp:
      image: onap/policy-apex-pdp:opensuse
    
  5. Run the project CSIT. For apex-pdp:

    cd docker/csit
    ./run-project-csit.sh apex-pdp
    

    Automated tests will be run, and log files displayed.

Running Policy Components Locally

The following page outlines how to run the policy framework components locally using IntelliJ, Eclipse and the Command Line.

Running the Policy Framework in Microk8s

The following page outlines how to run the policy framework components using microk8s.

Generating Swagger Documentation

1. Accessing Swagger documentation for springboot based policy applications

Springfox Swagger2 maven dependency aids with auto-generation of Swagger documentation.

Using the Swagger-UI maven dependency Swagger HTML documentation can be accessed at the root url.

  • The generated swagger.json can be accessed at: https://service_IP:service_port/v2/api-docs

  • Swagger UI can be accessed at: https://service_IP:service_port/swagger-ui/index.html

Bringing up Strimzi-Kafka Deploment with Policy Framework

This page will explain how to setup a local Kubernetes cluster and minimal helm setup to run and deploy Policy Framework on a single host.

This is meant for a development purpose only as we are going to use microk8s in this page: