Add documentation for certs configuration
[nonrtric.git] / docs / developer-guide.rst
index b3651f4..8abc92c 100644 (file)
@@ -1,5 +1,6 @@
 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
 .. SPDX-License-Identifier: CC-BY-4.0
+.. Copyright (C) 2020 Nordix
 
 Developer Guide
 ===============
@@ -7,16 +8,16 @@ Developer Guide
 This document provides a quickstart for developers of the Non-RT RIC.
 
 SDNC A1 Controller
-==================================
+==================
 
 Prerequisites
 -------------
 
 1. Java development kit (JDK), version 8
-2. Maven dependency-management tool, version 3.4 or later
+2. Maven dependency-management tool, version 3.6 or later
 3. Python, version 2
-4. Docker, version 19.03.1 or later
-5. Docker Compose, version 1.24.1 or later
+4. Docker, version 19.03.1 or latest
+5. Docker Compose, version 1.24.1 or latest
 
 Build and run
 -------------
@@ -28,25 +29,56 @@ This will build the project and create artifcats in maven repo
 Go to oam/installation directory and run this command ::
     mvn clean install -P docker
 
-This will create the docker images required for sdnc
+This will create the docker images required for A1 controller.
 
 After this step check for the docker images created by the maven build with this command ::
-    docker images | grep sdnc
+    docker images | grep a1-controller
 
 Go to oam/installation/src/main/yaml and run this command ::
-    docker-compose up -d sdnc
+    docker-compose up -d a1-controller
 
-This will create the docker containers with the sdnc image, you can check the status of the docker container using ::
-    docker-compose logs -f sdnc
+This will create the docker containers with the A1 controller image, you can check the status of the docker container using ::
+    docker-compose logs -f a1-controller
 
 The SDNC url to access the Northbound API,
     http://localhost:8282/apidoc/explorer/index.html
 
 Credentials: admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
 
+Configuration of certs
+----------------------
+The SDNC-A1 controller uses the default keystore and truststore that are built into the container.
+
+The paths and passwords for these stores are located in a properties file:
+ nonrtric/sdnc-a1-controller/oam/installation/src/main/properties/https-props.properties
+
+The default truststore includes the a1simulator cert as a trusted cert which is located here:
+ https://gerrit.o-ran-sc.org/r/gitweb?p=sim/a1-interface.git;a=tree;f=near-rt-ric-simulator/certificate;h=172c1e5aacd52d760e4416288dc5648a5817ce65;hb=HEAD
+
+The default keystore, truststore, and https-props.properties files can be overridden by mounting new files using the "volumes" field of docker-compose. Uncommment the following lines in docker-compose to do this, and provide paths to the new files:
+
+::
+
+#volumes:
+#   - <path_to_keystore>:/etc/ssl/certs/java/keystore.jks:ro
+#   - <path_to_truststore>:/etc/ssl/certs/java/truststore.jks:ro
+#   - <path_to_https-props>:/opt/onap/sdnc/data/properties/https-props.properties:ro
+
+The target paths in the container should not be modified.
+
+For example, assuming that the keystore, truststore, and https-props.properties files are located in the same directory as docker-compose:
+
+`volumes:`
+    `- ./new_keystore.jks:/etc/ssl/certs/java/keystore.jks:ro`
+
+    `- ./new_truststore.jks:/etc/ssl/certs/java/truststore.jks:ro`
+
+    `- ./new_https-props.properties:/opt/onap/sdnc/data/properties/https-props.properties:ro`
+
 Policy Agent
-============================
-The O-RAN NonRT RIC PolicyAgent provides a REST API for management of policices. It provides support for:
+============
+
+The O-RAN Non-RT RIC Policy Agent provides a REST API for management of policices. It provides support for:
 
  * Supervision of clients (R-APPs) to eliminate stray policies in case of failure
  * Consistency monitoring of the SMO view of policies and the actual situation in the RICs
@@ -57,39 +89,42 @@ The O-RAN NonRT RIC PolicyAgent provides a REST API for management of policices.
    * Query functions that can find all policies in a RIC, all policies owned by a service (R-APP), all policies of a type etc.
    * Maps O1 resources (ManagedElement) as defined in O1 to the controlling RIC.
 
-| The PolicyAgent can be accessed over the REST API or through the DMaaP Interface. The REST API is documented in the
-| *nonrtric/policy-agent/docs/api.yaml* file. Please refer to the README file of PolicyAgent to know more about the API's.
+| The Policy Agent can be accessed over the REST API or through the DMaaP Interface. The REST API is documented in the
+| *nonrtric/policy-agent/docs/api.yaml* file. Please refer to the README file of Policy Agent to know more about the API's.
 
+Configuration of certs
+----------------------
+The Policy Agent uses the default keystore and truststore that are built into the container. The paths and passwords for these stores are located in a yaml file:
+ nonrtric/policy-agent/config/application.yaml
 
-Near-RT RIC Simulator
-=====================================
+The default truststore includes a1simulator cert as a trusted cert which is located here:
+ https://gerrit.o-ran-sc.org/r/gitweb?p=sim/a1-interface.git;a=tree;f=near-rt-ric-simulator/certificate;h=172c1e5aacd52d760e4416288dc5648a5817ce65;hb=HEAD
 
+The default truststore also includes a1controller cert as a trusted cert which is located here (keystore.jks file):
+ https://gerrit.o-ran-sc.org/r/gitweb?p=nonrtric.git;a=tree;f=sdnc-a1-controller/oam/installation/sdnc-a1/src/main/resources;h=17fdf6cecc7a866c5ce10a35672b742a9f0c4acf;hb=HEAD
 
-Prerequisites
--------------
- 1. Java development kit (JDK), version 8
- 2. Maven dependency-management tool, version 3.4 or later
+There is also Policy Agent's own cert in the default truststore for mocking purposes and unit-testing (ApplicationTest.java).
 
-Build and run
--------------
+The default keystore, truststore, and application.yaml files can be overridden by mounting new files using the "volumes" field of docker-compose or docker run command.
+
+Assuming that the keystore, truststore, and application.yaml files are located in the same directory as docker-compose, the volumes field should have these entries:
+
+`volumes:`
+      `- ./new_keystore.jks:/opt/app/policy-agent/etc/cert/keystore.jks:ro`
+
+      `- ./new_truststore.jks:/opt/app/policy-agent/etc/cert/truststore.jks:ro`
 
-Go to the near-rt-ric-simulator/ric-plt-a1/ directory and run this command::
-     mvn clean install
-The docker image can be built using::
-    docker build -t {desiredImageName} .
-The image can be run using the command::
-    docker run -it -p {desiredPort}:8085 {desiredImageName}
+      `- ./new_application.yaml:/opt/app/policy-agent/config/application.yaml:ro`
 
-The functions written in *a1.py* are the ones matching the requests listed in the A1 open api yaml file. The functions written in *main.py* are the ones used for development purpose.
+The target paths in the container should not be modified.
 
-Different error codes can be thrown back according to the yaml file. In order to simulate an error code, simply add the query ?code={desiredCodeNumber} at the end of the address in the curl request.
+Example docker run command for mounting new files (assuming they are located in the current directory):
 
-For running the simulator outside of a docker container, run ./run_me.sh. It is possible to use the port of your choice, by adding it in the command: ./run_me.sh {desiredPort}.
-After that, it is the exact same use with or without a container.
+`docker run -p 8081:8081 -p 8433:8433 --name=policy-agent-container --network=nonrtric-docker-net --volume "$PWD/new_keystore.jks:/opt/app/policy-agent/etc/cert/keystore.jks" --volume "$PWD/new_truststore.jks:/opt/app/policy-agent/etc/cert/truststore.jks" --volume "$PWD/new_application.yaml:/opt/app/policy-agent/config/application.yaml" o-ran-sc/nonrtric-policy-agent:2.0.0-SNAPSHOT`
 
 End-to-end call
 ===============
 
 In order to make a complete end-to-end call, follow the instructions given in this `guide`_.
 
-.. _guide: https://wiki.o-ran-sc.org/pages/viewpage.action?pageId=12157166
\ No newline at end of file
+.. _guide: https://wiki.o-ran-sc.org/pages/viewpage.action?pageId=12157166