Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: fix grammar and spelling mistakes

Table of Contents
maxLevel3

Setting

...

Up Your Development Environment

Start by following the page You can set up the SDN-C IDE by following instructions from Setting Up Your Development Environment, this covers items such as signing up for a linux foundation account, configuring git, installing gerrit and IDE recommendations.

Downloading the Source Code

Creating Your Linux Foundation Account

If you already have a Linux Foundation account, you can skip this section.

You will need linux foundation account to submit code change to ONAP projects repos. If you only want to read the code, you can skip this step.

To create your linux foundation account, go to Linux Foundation Identity page, and select I need to create a Linux Foundation ID, the following page will be shown:

Image Removed

Filling the information and click on Create new account to proceed account creation.

Downloading SDN-C Projects

Downloading SDN-C Projects

Follow steps in Get git command from ONAP gerrit to get the git clone command and clone Follow steps in Get git command from ONAP gerrit to get the git clone command and clone each of the following SDNC projects:

...

Anchor
Get git clone command from ONAP gerrit
Get git clone command from ONAP gerrit
Get git clone Command from ONAP gerrit

Use your linux foundation account to login onto ONAP projects.

Get Project list by entering the project key name in the Filter, for example sdnc, this list of projects under sdnc will be shown as below:

Image Removed

Click on the wanted project from the list, the General page of the selected project will be shown. the following is the General page of sdnc/adaptors:

Image Removed

Now click on Clone with commit-msg hook, then click on http, then click on the notepad icon.

Image Removed

The git clone command for the selected project is now copied into your clipboard. You do paste to use it at where-ever you want to.

View Code on gerrit Website

ONAP code can also be viewed from gerrit web site as below (sdnc/adaptors project is used as the example here):

Image Removed

To view the coce through gerrit client, first follow steps in Get git command from ONAP gerrit to get the Projects list page.

Then, choose either one of the following option to view the code of the desired project.

Option 1: View Through "gitweb" Option in Project List Page

Note: this option will bring you to, and only to, the HEAD branch which is the master branch.

In the project list page, click on the gitweb under the Repository Browser column of your project row.

Image Removed

The master branch's summary page will be shown up. Click on the tree option.

Image Removed

Now, the repo details page will be shown and you can view the code in master branch from there.

Option 2: View from "Branches" Option in Project Page

Note: This option allows you to select a particular branch to view it code.

In the project list page, click the project under the Project Name column. (using sdnc/adaptors project as example here)

Image Removed

It takes you to the project General page, click on the Branches option.

Image Removed

The project page will be switched to Branches page. Check out the Branch Name column, click the gitweb on the same row of the desired branch.

Image Removed

The project Summary page of the selected branch will be shown up.  Click on the tree option.

The below instructions explain how to clone a repository from gerrit with the commit message hook included and it will be configured to use HTTPS. SSH is still the recommended protocol, these instructions serve as a workaround for users behind restrictive networking rules.

If you have worked on other projects in gerrit and are already familiar with cloning from gerrit you can ignore these instructions!

Info
titleCheck this only once

This should have been done as part of "Setting Up Your Development Environment" and is only needed if you are behind a proxy and plan to use HTTP.

If behind proxy, ensure git config has set http.proxy and https.proxy NVPs,

check with the following command:

git config -l

if no http/https proxies exist add them with the following commands:

git config --add http.proxy <your-proxy-http-url>

git config --add https.proxy <your-proxy-https-url>

here's an example:

git config --add http.proxy http://<user-id>:<password>@11234.proxy.com:8080

git config --add https.proxy https://<user-id>:<password>@11234.proxy.com:8080

Use your linux foundation account to login onto ONAP projects.

Get Project list by entering the project key name in the Filter, for example sdnc, this list of projects under sdnc will be shown as below:

Image Added

Click on the wanted project from the list, the General page of the selected project will be shown. the following is the General page of sdnc/adaptors:

Image Added

Now click on Clone with commit-msg hook, then click on http, then click on the notepad icon.

Image Added

The git clone command for the selected project is now copied into your clipboard. You do paste to use it at where-ever you want to.

View Code on gerrit Website

ONAP code can also be viewed from gerrit web site as below (sdnc/adaptors project is used as the example here):

Image Added


To view the coce through gerrit client, first follow steps in Get git command from ONAP gerrit to get the Projects list page.

Then, choose either one of the following option to view the code of the desired project.

Option 1: View Through "gitweb" Option in Project List Page

Note: this option will bring you to, and only to, the HEAD branch which is the master branch.

In the project list page, click on the gitweb under the Repository Browser column of your project row.

Image Added

The master branch's summary page will be shown up. Click on the tree option.

Image AddedImage Removed

Now, the repo details page will be shown and you can view the code in master branch from there.

Compiling

Maven

Version has to be version greater or equal to 3.3.3

Ensure your maven is installed / set up as per instruction from Maven section of Setting Up Your Development Environment page.

File settings.xml

Get settings.xml file

Following instruction from Maven Example settings.xml section of Setting Up Your Development Environment page to get your setting.xml file.

Configure settings file in IntelliJ

If you are going to do compiling in your intelliJ, follow steps in this section to configure settings.xml file in your interlliJ.

If you did not make your Maven Project by default shown, do the following:

In your interlliJ, Select View -> Tool Windows -> Maven Project

Image Removed

The maven project will shown on the right side of your intelliJ window.

Image Removed

 Click the Maven Settings wrench to bring up the Settings window:

Image Removed

Select the Override of the User settings file, add the settings.xml file full path, the Apply button will be enabled. click on Apply to apply the change.

Build The Code

Projects Build Order

The SDN-C projects repos should be built in the following order:

  • sdnc/core
  • sdnc/adaptors
  • sdnc/northbound
  • sdnc/plugins
  • sdnc/oam

Run Maven Build

Build From Command Line

Under the directory where your clone code is, run the following command to build the project

mvn clean install -s <the settings.xml file with full path>

Build Within InterlliJ

From interlliJ Maven Projects window, find the module marked with (root), expand it by clicking on the triange on the left side or double clicking the text. It will then show two folders : Lifecycle and Plugins. Use the same way to expand the Lifecycle folder, the build options are now shown:

Image Removed

To run the build, double click the Install or select install and then click on the Run Maven Build triange icon.

To do clean, double click the clean or select clean and then click on the Run Maven Build triange icon.

Tips

Skip Maven Javadoc Build

In the case, maven javadoc compliation failing which causes build process abort. To continue build the code, we need to skip the maven javadoc compilation.

From command line

add the "maven.javadoc.skip=true" in the command line build command as the following:

Option 2: View from "Branches" Option in Project Page

Note: This option allows you to select a particular branch to view it code.

In the project list page, click the project under the Project Name column. (using sdnc/adaptors project as example here)

Image Added

It takes you to the project General page, click on the Branches option.

Image Added

The project page will be switched to Branches page. Check out the Branch Name column, click the gitweb on the same row of the desired branch.

Image Added

The project Summary page of the selected branch will be shown up.  Click on the tree option.

Image Added

Now, the repo details page will be shown and you can view the code in master branch from there.

Compiling

Maven

Version has to be version greater or equal to 3.3.3

Ensure your maven is installed / set up as per instruction from Maven section of Setting Up Your Development Environment page.

File settings.xml

Get settings.xml file

Following instruction from Maven Example settings.xml section of Setting Up Your Development Environment page to get your settings.xml file.

Info
titleJust to emphasis

If behind proxy,
Add proxy definition under proxies block, if under proxy Collapse source

1
2
3
4
5
6
7
8

<proxy>
  <id>optional</id>
  <active>true</active>
  <protocol>http</protocol>
  <host>11234.proxy.com</host>
  <port>8080</port>
  <nonProxyHosts>local.net|localhost|127.0.0.1</nonProxyHosts>
</proxy>

Configure settings file in IntelliJ

If you are going to compile with intelliJ, follow steps in this section to configure settings.xml file in intelliJ.

If you did not make your Maven Project by default shown, do the following:

In intelliJ, Select View -> Tool Windows -> Maven Project

Image Added

The maven project will shown on the right side of the intelliJ window.

Image Added

 Click the Maven Settings wrench to bring up the Settings window:

Image Added

Select the Override of the User settings file, add the settings.xml file full path, the Apply button will be enabled. click on Apply to apply the change.

Build The Code

Projects Build Order

The SDN-C projects repositories should be built in the following order:

  • sdnc/core
  • sdnc/adaptors
  • sdnc/northbound
  • sdnc/plugins
  • sdnc/oam

Run Maven Build

Build From Command Line

Under the directory where your clone code is, run the following command to build the project

mvn clean install mvn clean install -Dmaven.javadoc.skip=true -s <the settings.xml file with full path>

From pom file

add the following property definition:

Info
iconfalse
titlePOM file property to skip Maven JAVADOC build

<properties>

<maven.javadoc.skip>true</maven.javadoc.skip>

</properties>

Unit Testing

Definition of Good Unit Test

Before start writing unit test, it's important that there's a common definition of what a good unit test is. 

From the official site of Roy Osherove’s book The Art of Unit Testing

Build Within IntelliJ

From intelliJ Maven Projects window, find the module marked with (root), expand it by clicking on the triangle on the left side or double clicking the text. It will then show two folders : Lifecycle and Plugins. Use the same way to expand the Lifecycle folder, the build options are now shown:

Image Added

To run the build, double click the Install or select install and then click on the Run Maven Build triangle icon.

To do clean, double click the clean or select clean and then click on the Run Maven Build triangle icon.

Tips

Skip Maven Javadoc Build

In the case, maven javadoc compliation failing which causes build process abort. To continue build the code, we need to skip the maven javadoc compilation.

From command line

add the "maven.javadoc.skip=true" in the command line build command as the following:

mvn clean install -Dmaven.javadoc.skip=true -s <the settings.xml file with full path>

From pom file

add the following property definition:

Info
iconfalse
titlePOM file property to skip Maven JAVADOC build

<properties>

<maven.javadoc.skip>true</maven.javadoc.skip>

</properties>

Unit Testing

Definition of Good Unit Test

Before start writing unit test, it's important that there's a common definition of what a good unit test is. 

From the official site of Roy Osherove’s book The Art of Unit Testing

A unit test is an automated piece of code that invokes a unit of A unit test is an automated piece of code that invokes a unit of work in the system and then checks a single assumption about the behavior of that unit of work.

...

In anywhere of this class editor, do Ctrl+Shift+T or right click to bring up right click menu, then select Go To, then Test in the cascaded menu:

Image RemovedImage Added

This will bring up the Choose Test for... window as below.

Choose Create New Test... for creating brand new JUnit Test, or just choose the test class to go to the existing tests.

Image RemovedImage Added

When Create New Test... is selected, the Create Test window will be brough brought up:

Image RemovedImage Added

The test Class name is automatically generated and shown in the window. Ensure the Testing library is selected with JUnit4.

...

If the Junit and mockito dependencies are not in the module and its parent pom file, add them to the module's pom.xml file as the following. A sample snippet is below:

Info
iconfalse
titleJUnit dependencies in POM file
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>

...

To commit code to ONAP, you must have git-review installed. The steps in this section only need to be done one time, except the Tips (smile). This should have been done already during Setting Up Your Development Environment.

On Linux

run the following command to check if git-review is installed as part of your OS image.

...

Click the Add button in the Reviewers section, to add reviewers (who is going to review your code) and committers (who is going to review your code as well as approve and commit your code).

Image RemovedImage Added

Note:

    • The ONAP Jobbuilder will be added automatically within one or two minutes after the review created, and a verfiy build will also be automatically triggered for your review in ONAP jenkins server.
    • The committer can be found from Software Defined Newtork Controller secion in Resources and Repositories (Deprecated) page.


By now, you will just wait and check your email for information of

...

StepsCommandNotes
1git commit --amendupdate the comment as desired
2git log --shortstatvalidate your commit now has the updated comments, as well as the Change-Id as the one in the gerrit review
3git review

push the changed comment to the review again.

Once the command is completed, go to your review, you will see

  • the comments content adjust to your new ones
  • the Patch Sets is now increased by one, such as from (1/1) to (2/2). here's an example:

Image RemovedImage Added


How to Update the Code in a Review

...

Stepscommandnotes
1git commit -sam "my updated code"To create a new commit with your updated code
2git log --shortstat

you will see the most 2 recent commits are from

  • your commit from step 1
  • your original commit of the existing review
3git rebase -i HEAD~2

To run rebase interactively for the most recent 2 commits

In the interactive mode, it will bring up the text which contains pick for your last 2 commits along with the following content:

Image RemovedImage Added

Do the following:

  • replace the pick in the start line of your commit from step 1 (marked with "my updated code") with s or squash,
  • remove any other text line related to this commit in the line below.
  • save the change by entering :wq


Once this command is completed, 2 commits will be merged into 1 commit.

4git log --shortstat

you will see there's only 1 commit which replaces the 2 commit you have seen in step 2.

validate your commit has the Change-Id as the one in the gerrit review 

5git review

push the changed comment to the review again.

Once the command is completed, go to your review, you will see

  • the comments content adjust to your new ones
  • the Patch Sets is now increased by one, such as from (1/1) to (2/2). here's an example:

Image RemovedImage Added


Anchor
Fix no change-id
Fix no change-id
How to Fix a Commit which Does Not have a Change-Id

...

StepsCommandNotes
1git reset HEAD~1to undo the commit
2

from github helper page, download commit-msg,

and place it under your <repo>/.git/hook hooks directory

set the proper if your O/S adds and extension to the file, remove. It must be named "commit-msg"

set the proper commit-msg hook

this will set the Change-Id properly in your commit

3Use your previous command to create the commit again
4git log --shortstatto check the existence of Change-Id

...

To find all of your changes, you can type in "is:closed(owner:self)" in the Search field at Gerrit self dashboard, then click on the Search button.

Image RemovedImage Added


Deployment

Deploying a Minimal ONAP SDN-C Environment

...

There is an settings.yaml.development under integration\bootstrap\vagrant-onap\etc etc (deprecated - /etc directory has been moved to project integration/devtool)used for different deployment scenarios.

...

Run the following command to create settings.yaml file from the repo's settings.yaml.development file:

cp settings.yaml.developmenttest settings.yaml
vim settings.yaml

...

  • In configuration =  {...}, find docker_version and update the corresponding value to 'latest'

  • If you are using VirtualBox provider and have DNS an issue with the VM vagrant creates annot resolve not resolving hostnames then enable the natdnshostresolver1

...

Code Block
languagediff
themeDJango
diff --git a/bootstrap/vagrant-onap/Vagrantfile b/bootstrap/vagrant-onap/Vagrantfile
index 0664e5f..0032dd1667d3bf 100644
--- a/bootstrap/vagrant-onap/Vagrantfile
+++ b/bootstrap/vagrant-onap/Vagrantfile
@@ -13,7 +13,7 @@ configuration = {
   'nexus_password'      => 'docker',
   'dmaap_topic'         => 'AUTO',
   'artifacts_version'   => '1.0.0',
-  'docker_version'      => '1.0-STAGING-latest',
+  'docker_version'      => 'latest',
   # Parameters for DCAE instantiation
   'dcae_zone'           => 'iad4',
   'dcae_state'          => 'vi',
@@ -340302,6 +340302,711 @@ end
 
 Vagrant.configure("2") do |config|
 
+   if provider == :virtualbox  # Common Settings:
 
&& "sdnc".eql?(requested_machine)
+          nodeconfigconfig.vm.providernetwork "virtualboxforwarded_port", do |vbox|
+     guest: 8282, host: 8282, protocol: "tcp", auto_correct: true
+     vbox.customize ['modifyvm', :id, '--natdnshostresolver1', 'on']
      config.vm.network "forwarded_port", guest: 8201, host: 8201, protocol: "tcp", auto_correct: true
+   end
+
   # PROXY definitions
     vbox.customizeif ENV['modifyvm', :id, '--nictype1', 'virtio']
  http_proxy'] != nil and ENV['https_proxy'] != nil and ENV['no_proxy'] != nil
       if not vbox.customize ['modifyvm', :id, '--audio', 'none']Vagrant.has_plugin?('vagrant-proxyconf')
@@ -340,6 +345,7 @@ Vagrant.configure("2") do |config|
         #  vbox.Common Settings:
 
         nodeconfig.vm.provider "virtualbox" do |vbox|
+          vbox.customize ['modifyvm', :id, '--vramnatdnshostresolver1', '1on']


Also 

Modify the SDN-C Deployment Script

           vbox.customize ['modifyvm', :id, '--nictype1', 'virtio']
           vbox.customize ['modifyvm', :id, '--audio', 'none']
           vbox.customize ['modifyvm', :id, '--vram', '1']




Also 




Modify the SDN-C Deployment Script

The get_sdnc_images  function in the "integration/bootstrap/vagrant-onap/lib/sdnc" may need to be synchronized with the images defined in the docker compose file [sdnc/oam.git] / installation / src / main / yaml / docker-compose.yml.  If these are not synchroned you will get a 

...

Code Block
languagediff
themeDJango
diff --git a/bootstrap/vagrant-onap/lib/sdnc b/bootstrap/vagrant-onap/lib/sdnc
index a69ce18..ff582fe 100755
--- a/bootstrap/vagrant-onap/lib/sdnc
+++ b/bootstrap/vagrant-onap/lib/sdnc
@@ -3,7 +3,7 @@
 source /var/onap/functions
 source /var/onap/ccsdk
 
-sdnc_src_folder=$git_src_folder/openecomp/sdnc
+sdnc_src_folder=$git_src_folder/onap/sdnc
 sdnc_repos=("sdnc/adaptors" "sdnc/architecture" "sdnc/core" "sdnc/features" \
 "sdnc/northbound" "sdnc/oam" "sdnc/parent" "sdnc/plugins")
 
@@ -45,9 +45,11 @@ function get_sdnc_images {
     if [[ "$build_image" == "True" ]]; then
         _build_sdnc_images
     else
-        pull_openecomp_image sdnc-image openecomp/sdnc-image:latest
-        pull_openecomp_image admportal-sdnc-image openecomp/admportal-sdnc-image:latest
-        pull_openecomp_image dgbuilder-sdnc-image openecomp/dgbuilder-sdnc-image:latest
+        pull_onap_image sdnc-image onap/sdnc-image:latest
+        pull_onap_image admportal-sdnc-image onap/admportal-sdnc-image:latest
+        pull_onap_image ccsdk-dgbuilder-image onap/ccsdk-dgbuilder-image:latest
+        pull_onap_image sdnc-ueb-listener-image onap/sdnc-ueb-listener-image:latest
+        pull_onap_image sdnc-dmaap-listener-image onap/sdnc-dmaap-listener-image:latest
     fi
     pull_docker_image mysql/mysql-server:5.6
 }

Deployment

Start Deployment

cd integration/bootstrap/vagrant-onap
./tools/run.sh sdnc

Configure Port Forwarding

This could be replaced by adding scripts in Vagrantfile.

Image Removed

Open RestConf Page


     fi
     pull_docker_image mysql/mysql-server:5.6
 }



Deployment

Start Deployment

cd integration/bootstrap/vagrant-onap

./tools/run.sh sdnc

This will configure and start the guess VM

configure and start the sdnc docker resources on the guest VM. 

and finnaly the SDNC will start

Gliffy Diagram
namevagrantSDNCDeployment
pagePin3


Tip
titlewait

Once the vagrant has completed running it will still take some time for SDNC to come up.   Have patience.  


Connecting to your deployment

Basic Usage of Vagrant

Vagrant commands are executed on the Base OS.    

Get Detail about the vagrant Commands 

Print the usage use the '-h'  option

vagrant -h

vagrant <command> -h

check running vm instances

From the Base OS use the following command to see the running guest VM id and name.  

vagrant global-status

Port Forwarding

The guest VM is running in its own private network and is using the NAT to get the the Base OS network.  To see the port forwarding run the following command.  

vagrant port sdnc

If you don't see any ports Oops.  Configuring port-forwarding should have been configured earlier when editing the [integration.git] / bootstrap / vagrant-onap / Vagrantfile.  Something must of went wrong.   Here is the example of a snippet that can be added to the Vagrant file.  

 Vagrant.configure("2") do |config|

if provider == :virtualbox && "sdnc".eql?(requested_machine)
config.vm.network "forwarded_port", guest: 8282, host: 8282, protocol: "tcp", auto_correct: true
config.vm.network "forwarded_port", guest: 8281, host: 8202, protocol: "tcp", auto_correct: true
end


Port forwarding can also be configured in the Virtual Box Gui. Here is an example

Image Added

ssh to the Guest OS

The follow command  will open a ssh terminal to the running guess vm.  The guest vm name or id can be used.   

vagrant ssh sdnch

Basic Usage of Docker

docker commands are executed on the guest OS

Get Detail about the dockerCommands 

Print the usage use the '-h'  option

vagrant -h

vagrant <command> -h

List docker container images

On the Guess VM execute the docker commands 

docker images

List the running docker containers

The following command will list the running docker containers.  The container's id, name and which ports are forwarded to the Guess OS can be found in this list.  

docker ps -a

open a terminal to a docker running docker container

Use the docker container id or name use the following command to open a terminal to that container.  

docker exec -i -t sdnc_controller_container bash

OpenDaylight RestConf API Web GUI

To connect to the running sdnc port forwarding must be configured correctly. The port forwarded in the instruction above was 8282.  

http://baseoshostiphttp://127.0.0.1:8282/apidoc/explorer/index.html

Credentials: admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U

Basic Usage of Vagrant and Docker

// check running vm instances

vagrant global-status

//  ssh to the vm

vagrant ssh ${vm-id}

// check docker images

docker images

// check running docker instances

docker ps -a

// ssh to the docker instance

...

The credentials to connect to the SDNC Web GUI are can be found in the file [sdnc/oam.git] / installation / sdnc / src / main / scripts / startODL.sh.  Look for the variable ODL_ADMIN_PASSWORD

Here is an example

Credentials: admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U


Reference:

[1] ONAP integration: https://git.onap.org/integration/

...

[3] ONAP SDC setup: Using Vagrant-Onap for local deployment of SDC project - WIP!!!#OnapforlocaldeploymentofSDCproject-WIP!!!-InitialSetup

[4] Virtualbox Download link: https://www.virtualbox.org/wiki/Linux_Downloads

...

Code Block
...
rpc haok-sdnc-test {
    output {
      leaf hello-world {
         type string;
         mandatory true;
      }
    }
}
...


Image Modified

Use Maven to Build Project

...

It takes a miniute to restart the karaf platform which really depends on the performance of your host machine.

Image RemovedImage Added

Remote Debugging

...

After the docker instances fully started, you should see the karaf log information below with 5005 port open.

Image RemovedImage Added

Use Remote debug in IDE

Image RemovedImage Added