Developer HowTo

From OSM Public Wiki
Revision as of 11:41, 21 August 2018 by Garciadeblas (talk | contribs) (→‎NBI)
Jump to: navigation, search

The aim of this entry is to provide a guide for developers to set up their environment, in order to ease the development with the different OSM modules.

Introduction

Components run in a separate docker container (except juju controller that uses a lxd container). Normally you want to debug one component directly at host instead of on a container and use the rest of dependent containers.

These are the components with the port that they export, their relationships with the name of env variables that control them. For clarity the kafka dependency of lcm, nbi, mon and pm is not depicted.

     __________
    |          | 
    | light-ui |OSM_SERVER               _______
    | :80      |----------------------> |       |
    |__________|                        | nbi   |
                     OSMNBI_STORAGE_PATH| :9999 |OSMNBI_DATABASE_HOST        _______ 
    .............. <--------------------|_______|-------------------------> |       |
    . volume:    .                                                          |       |
    . osm_osm_   .                                                          | mongo |
    . packages   .   OSMLCM_STORAGE_PATH _______ OSMLCM_DATABASE_HOST       | :27017|
    .............. <--------------------|       |-------------------------> |_______|
                                        | lcm   |
    **************       OSMLCM_VCA_HOST|       |OSMLCM_RO_HOST
    * lxd: juju  * <--------------------|_______|--------------|
    * controller *                                             |
    **************                       _______               |             _______
                                        |       | <-------------            |       |
                                        | ro    |                           | ro-db |  
                                        | :9090 |RO_DB_HOST                 | :3306 |
                                        |_______|-------------------------> |_______|

     _______     _______                 _______                             _________
    |       |   |       |               |       |                           |         |
    | mon   |   | pm    |               | kafka |KAFKA_ZOOKEEPER_CONNECT    |zookeeper|  
    | :8662 |   |       |               | :9092 |-------------------------> | :2181   |       
    |_______|   |_______|               |_______|                           |_________|

General steps

1.- Shutdown the module you want to use

First thing, you need to stop the module you want to develop. As OSM uses a docker service do not manually stop the container because it will be automatically relaunched again. Scale it to 0 for stopping and to 1 for running again.

docker service scale osm_lcm=0

2.- Clone the module

git clone https://osm.etsi.org/gerrit/osm/LCM

3.- Install the module

Inside the folder where the module is cloned type the following command:

pip3 install -e .

4.- Setup the IDE

For this tutorial we will use PyCharm as IDE. First thing, we will set "Python3" as default python interpreter:

PythonInterpreter.jpg

Next we will configure a new debug environment. For that we will go to the "Run" tab "Edit configurations". In the new window that appears we will need to configure the script and the environment parameters.

PyCharmConfiguration.jpg

5.- Other modules' IP addresses

You need to feed the IP addresses of the modules it is going to communicate to. For that, you can use your "/etc/hosts" file.

In case the module under development is running in the same server where the rest of the modules are located, use "127.0.0.1" as the IP address of those modules. For instance, in the following example we have added mongo, ro and kafka to the line containing "127.0.0.1":

127.0.0.1 localhost mongo ro kafka

In case the module under development is running in a different server from the rest of modules, you will need to provide the IP address of that server. For instance, in the following example we have added a new line with the name resolution for mongo ro and kafka to IP address "a.b.c.d":

a.b.c.d mongo ro kafka

6.- Install packages needed

Is it possible that you will need to install some additional packages in your server. If needed use the commands "pip3 install" or "apt-get install" for that.

Some modules imports another modules from OSM. The modules needed are:

n2vc: git clone https://osm.etsi.org/gerrit/osm/N2VC
common: git clone https://osm.etsi.org/gerrit/osm/common
IM: git clone https://osm.etsi.org/gerrit/osm/IM

NBI

docker service scale osm_nbi=0
git clone https://osm.etsi.org/gerrit/osm/NBI
pip3 install -e NBI

Python interpreter: Python3 Script: $INSTALLATION_FOLDER/NBI/osm_nbi/nbi.py

Environment variables:

  • OSMNBI_STORAGE_PATH: Path of the docker volume for filestorage
    • In case you develop in a different server than OSM, then it only works if LCM is also running in develop mode.
  • OSMNBI_DATABASE_HOST: Mongo IP in case it is not configured in "/etc/hosts" file
    • In case you develop in the same server as OSM is installed, then it should be "127.0.0.1"

OSM modules:

git clone https://osm.etsi.org/gerrit/osm/common
pip3 install common

LCM

docker service scale osm_lcm=0
git clone https://osm.etsi.org/gerrit/osm/LCM
pip3 install -e .

Python interpreter: Python3 Script: $INSTALLATION_FOLDER/LCM/osm_lcm/lcm.py

Environment variables:

  • OSMLCM_STORAGE_PATH: Path of the docker volume for filestorage
    • In case you develop in a different server than OSM, then it only works if NBI is also running in develop mode.
  • OSMLCM_DATABASE_HOST: Mongo IP in case it is not configured in "/etc/hosts" file
    • In case you develop in the same server as OSM is installed, then it should be "127.0.0.1"
  • OSMLCM_RO_HOST: RO IP in case it is not configured in "/etc/hosts" file
    • In case you develop in the same server as OSM is installed, then it should be "127.0.0.1"
  • OSMLCM_VCA_SECRET: To get this value run the following command in the OSM host:
    • grep password /home/ubuntu/.local/share/juju/accounts.yaml |awk '{print $2}'
  • OSMLCM_VCA_HOST: Will be different depending on where your develop environment is running:
    • In case you run it in the same server as OSM use the following command:
      • juju show-controller|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'
    • In case you use a different server than OSM:
      • IP address from OSM
      • Configure the following ip-table rule in OSM host:
        • sudo iptables -t nat -A PREROUTING -p tcp -d <OSM_IP> --dport 17070 -j DNAT --to <VCA_IP>:17070

OSM modules:

git clone https://osm.etsi.org/gerrit/osm/N2VC
cd N2VC
pip3 install .

git clone https://osm.etsi.org/gerrit/osm/common
cd common
pip3 install .