.. ============LICENSE_START==========================================
.. ===================================================================
.. Copyright © 2017 AT&T Intellectual Property. All rights reserved.
.. ===================================================================
.. Licensed under the Creative Commons License, Attribution 4.0 Intl.  (the "License");
.. you may not use this documentation except in compliance with the License.
.. You may obtain a copy of the License at
..
..  https://creativecommons.org/licenses/by/4.0/
..
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS,
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.. See the License for the specific language governing permissions and
.. limitations under the License.
.. ============LICENSE_END============================================
.. ECOMP is a trademark and service mark of AT&T Intellectual Property.

======================================
APPC Testing of a Local ONAP Component
======================================


*NOTE: Tested on APPC ONAP Component only, on a single Ubuntu 16.04 LTS
VM*

See also `Developing
ONAP <https://wiki.onap.org/display/DW/Developing+ONAP>`__


General Requirements
====================

-  A Gerrit Account – to create a Gerrit account, please create one
   here: https://identity.linuxfoundation.org

|image0|

-  An Ubuntu 16.04 LTS Desktop VM (14.04 LTS should work as well)

   -  No less than 8 GB
   -  40 GB of hard disk drive
   -  4 vCPUs should suffice

-  Software Download Requirements:

   -  Eclipse IDE for Java EE Developers (latest stable release is neon
      3):
      http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/neon3
   -  Nexus OSS 2 (to upload ONAP Component’s Maven Artifacts locally):
      https://www.sonatype.com/download-oss-sonatype - grab the
      bundle.tar.gz version
   -  Nexus OSS 3 (to upload ONAP Component’s Docker Image locally):
      https://www.sonatype.com/download-oss-sonatype - grab the
      bundle.tar.gz version
   -  Apache Maven (latest stable version is 3.3.9):
      https://maven.apache.org/download.cgi - grab the binary tar.gz
      archive


Installation procedure
======================

General Setup
-------------

-  First, download all of the Ubuntu apt packages needed:

   .. code:: bash

       sudo apt-get -y install openjdk-8-jdk maven git-review

Setting up Git
--------------

-  Set up your git information:

   .. code:: bash

       git config --global user.email your_LF_account@email
       git config --global --add gitreview.username your_LF_user_name

   -  NOTE: For people using VPN/Proxy, you might have proxy problem
      while connecting to LF website. To avoid the problem, you should
      add the proxy setting in git config, using the following command:

      .. code:: bash

          git config --global https.proxy https://<proxy_username>:<proxy_password>@<proxy_url>
          git config --global http.proxy http://<proxy_username>:<proxy_password>@<proxy_url>

-  Generate an HTTP Password in order to clone the necessary git repos:

   -  Go to https://gerrit.onap.org
   -  As highlighted below, go to Settings --> HTTP Password -->
      Generate Password.

   |image1|

-  On a clean folder on your Desktop (or your preferred path), create a
   folder and clone the ONAP APPC Git Repositories that we will test
   with (NOTE: Use the previously generated HTTP Password to
   authenticate):

   .. code:: bash

       git clone http://<LF_USER_ID>@gerrit.onap.org/r/a/appc
       git clone http://<LF_USER_ID>@gerrit.onap.org/r/a/appc/deployment

Docker Engine Installation
--------------------------

-  Go to `this
   link <https://docs.docker.com/engine/installation/linux/ubuntu/>`__
   to set up the Docker Engine on your local machine (you will need this
   to store the Docker Images that will be uploaded in the local Nexus
   3’s Docker Registry)

Setting up Nexus 2 and 3 OSS Repositories
-----------------------------------------

-  Install & run Nexus OSS 2 without sudo rights as a non-root user
   (detailed and clear instructions on how to do install it are
   `here <https://books.sonatype.com/nexus-book/reference/installing.html>`__
   & how to run it are
   `here <https://books.sonatype.com/nexus-book/reference/running.html>`__)

   -  Default Nexus 2 OSS Local Webpage: http://localhost:8081/nexus
   -  Check nexus logs: $NEXUS\_HOME/logs/wrapper.log
   -  Default credentials: username is deployment, password is
      deployment123

-  Install & run Nexus OSS 3 without sudo rights as a non-root user
   (detailed and clear instructions on how to do are
   `here <https://books.sonatype.com/nexus-book/reference3/install.html#installation-archive>`__)

   -  IMPORTANT: Since both Nexus 2 and Nexus 3’s web sites run on port
      8081, the Nexus 3 OSS needs to modify its configuration to start
      up as a process in another port so as to avoid a conflict.
      Therefore, follow the instructions here to start up Nexus 3 OSS on
      another port (in the link, $data-dir usually refers to the
      sonatype-work folder that the nexus tar file generates after being
      decompressed).
   -  Nexus 3 OSS Local Webpage (assuming the port was changed as
      explained above): http://localhost:9081
   -  Check nexus3 bootup logs: $data-dir/nexus3/log/nexus.log
   -  Check nexus3 logs: $data-dir/nexus3/log/jvm.log
   -  Default credentials: username is admin, default password is
      admin123

-  Create a Docker Registry Repository on Nexus 3 OSS Webpage

   -  In order to be able to deploy docker images to Nexus 3 OSS
      Repository, you need to create a Docker Registry where you will
      upload these docker images to.
   -  Go to http://localhost:9081 to access the Nexus 3 OSS Webpage, log
      on, click on settings icon, and then click on “Repositories” which
      will give you the option to “Create Repository” as shown below:

   |image2|

   -  On the next window, choose the “Docker (Hosted)” option

      -  NOTE: you can choose the “Docker (Proxy)” option if you have a
         docker registry outside of your local Nexus 3 OSS that you want
         to externally connect to, such as the public docker.io registry
         for example.

   -  On the next window, fill out the required fields as highlighted
      below and click on “Create Repository” to create your local docker
      registry (NOTE: you can see that the HTTP port is at 8082, which
      will be your local docker registry port)

   |image3|

Setting up Eclipse Java EE & Importing the ONAP Maven Projects
--------------------------------------------------------------

-  As root, open up Eclipse (preference is to create a new workspace):

   .. code:: bash

       sudo -i
       cd <ECLIPSE_BIN_FOLDER>
       ./eclipse

-  Set up general Eclipse configuration as below:

   -  Go to Window --> Preferences

      -  On the left side of the pop up window, go to Maven --> User
         Settings. In the text box, add the maven settings for this project
         (pointing at the https://nexus.onap.org repositories), then click
         on Update Settings --> Apply --> OK

   |image4|

-  Go to Maven --> Installations, then “Add…” the downloaded Apache
   Maven (tested with 3.3.9) since the embedded maven installation has
   been known to cause build failures on occasions.

|image5|

-  Go to Java --> Installed JREs, then “Add...” the downloaded Java 8
   OpenJDK (usually located on /usr/lib/jvm/java-8-openjdk-amd64) as a
   “Standard VM”

|image6|

-  Repeat the same steps below for APPC & deployment repos:

   -  Go to File --> Import… --> Maven --> Select Existing Maven
      Projects

   |image7|

-  Pick the folder where you cloned the git repository

-  Checking the “Add project(s) to working set” and defining a new
   working set name is suggested to separate multiple git repositories

|image8|

Initial build of the APPC Core Maven Project
---------------------------------------------

This section will guide you on the steps to take in order to compile the
APPC Core Project into your local maven repository (usually located on
the /root/.m2/repository path).

-  On the Package Explorer, right click on the APPC Core package and go
   to Run As --> Run Configurations…

-  In the Run Configurations window, select Maven Build on the left side
   & click on the “New” button. Set up your maven build configuration as
   follows (relevant parts are highlighted):

|image9|

-  NOTE: In the above figure, it is recommended to uncheck the “Skip
   Tests” option to run the test cases of the APPC Core Package to make
   sure that APPC Core Features are tested beforehand.

-  Make sure that you are pointing to the previously installed Java 8:

|image10|

-  For debugging purposes, it helps to output all build maven logs
   generated to a file where you can check for any errors:

|image11|

-  Finally, click on “Run.” Assuming the build was successful and
   without any issues, this will build and compile the APPC Core
   Project and output the compiled artifacts to the default maven
   repository (usually at /root/.m2/repository).

Deploying the APPC Core Maven Artifacts to Local Nexus 2 Repository
--------------------------------------------------------------------

Now that the APPC Core Project has been locally compiled by downloading
the APPC Core artifacts from the LF Nexus 2 Repository
(https://nexus.onap.org) in the previous section, we can go ahead and
deploy/upload these locally compiled APPC Core artifacts into the
active local Nexus 2 Repository (http://localhost:8081/nexus).

-  You can use the same maven build item that was created in the
   previous section “Initial building of the APPC Core Maven Project”
   but just change the maven goal from “clean install” to “clean deploy”

-  Make sure that the snapshot repository in the APPC Core’s rootpom
   file (appc/pom.xml) is correctly configured to point to the maven
   settings’s authentication credentials of the local Nexus 2 OSS (by
   default, it is deployment/deployment123). If not, then the upload
   will fail with an Unauthorized error since it will try to default to
   uploading to the LF Nexus 2 OSS Repository instead:

|image12|

-  You can now run the maven build in the Run Configurations window.

-  Once your build is successful, check that all of the intended APPC
   Core maven artifacts have been successfully uploaded to your local
   Nexus 2 OSS by going on the snapshot repository (located on
   http://localhost:8081/nexus/content/repositories/snapshots/org/onap/appc)

-  Now that the APPC Core maven artifacts are hosted and deployed on
   your local Nexus 2 OSS Repository, you can compile and deploy the
   APPC Deployment Repository in the next two sections.

Initial build of the APPC Deployment Maven Project
---------------------------------------------------

This section will guide you on the steps to take in order to compile the
APPC Deployment Project into your local maven repository (usually
located on the /root/.m2/repository path). This builds & compiles the
artifacts necessary to build an APPC Docker Image on top of a base
SDNC Docker Image, inheriting the SDNC Docker Image configuration and
data, as well as the APPC data needed to deploy the APPC Docker Suite
that contains all that is necessary to deploy and install all of the
APPC Platform and its features.

-  On the Package Explorer, right click on the APPC Deployment package
   and go to Run As à Run Configurations…

-  In the Run Configurations window, select Maven Build on the left side
   & click on the “New” button. Set up your maven build configuration as
   follows (relevant parts are highlighted):

|image13|

-  Make sure that you are pointing to the previously installed Java 8:

|image14|

-  For debugging purposes, it helps to output all build maven logs
   generated to a file where you can check for any errors:

|image15|

-  Finally, click on “Run.” Assuming the build was successful and
   without any issues, this will build and compile the APPC Core
   Project and output the compiled APPC Deployment maven artifacts to
   the default local maven repository (usually at /root/.m2/repository).

Deploying the APPC Deployment Maven Artifacts to Nexus 2 and Docker Image to Nexus 3 Repositories
--------------------------------------------------------------------------------------------------

*IMPORTANT: Make sure that you have created a local docker registry in
your local Nexus 3 OSS Repository before trying the steps below.*

Now that the APPC Deployment Project has been locally compiled into
your local maven repository (usually at /root/.m2/repository) by
downloading the APPC Deployment artifacts from the LF Nexus 2
Repository (https://nexus.onap.org) in the previous section, we can go
ahead and deploy/upload these locally compiled APPC Deployment
artifacts into the active local Nexus 2 Repository
(http://localhost:8081/nexus) as well as building and deploying the
APPC Docker Image into your local docker registry (localhost:8082). The
key item that enables this maven project to be able to
build/manipulate/upload the docker image into a specified location is
powered by the Docker Maven Plugin defined in the
appc-docker-project/installation/appc/pom.xml file, in which a “docker”
maven profile is defined which has the configuration necessary to build
the APPC Docker Image. More information on this maven docker plugin can
be found on https://dmp.fabric8.io/.

-  Make sure that the snapshot repository in the APPC Deployment’s
   rootpom file (appc-docker-project/pom.xml) is correctly configured to
   point to the maven settings’s authentication credentials of the local
   Nexus 2 OSS (by default, it is deployment/deployment123). If not,
   then the upload will fail with an Unauthorized error since it will
   try to default to uploading to the LF Nexus 2 OSS Repository instead:

|image16|

-  Go to the Run Configurations window. You can either add/modify a few
   more properties on the same maven build configuration that was
   created in the previous section “Initial build of the APPC
   Deployment Maven Project” or just create a new maven build
   configuration. The additional properties and maven goal change are
   highlighted below:

|image17|

-  From the new maven build configuration below, the following
   properties were added to be able to download the dependent SDNC
   Docker Image from LF Nexus 3 Docker Registry, as well as uploading
   the finalized APPC Docker Image itself:

   -  docker.push.registry = localhost:8082 --> This is your local
      docker registry location

      -  docker.push.username & docker.push.password --> Authentication
         credentials to upload a docker image to the defined docker
         registry

   -  docker.pull.registry = nexus3.onap.org:10001 --> This is the LF
      Nexus 3 docker registry location

      -  docker.pull.username & docker.pull.password --> Authentication
         credentials to download a docker image from the defined docker
         registry

   -  altDeploymentRepository=openecomp-snapshot::default::http://localhost:8081/nexus/content/repositories/snapshots/
      --> This serves as the alternative repository on which maven
      artifacts should be deployed on in case that it was not defined in
      . Therefore, this is optional.

-  You can now run your maven build configuration.

-  Once your build is successful, check that all of the intended APPC
   Deployment maven artifacts have been successfully uploaded to your
   local Nexus 2 OSS by going on the snapshot repository (located on
   http://localhost:8081/nexus/content/repositories/snapshots/org/onap/appc).
   Also, go to the Nexus 3 Docker Registry location in the
   http://localhost:9081/#browse/browse/components:docker.local to make
   sure that your APPC Docker Image has been uploaded.

   -  NOTE: In the docker registry location on the Nexus 3 OSS Website,
      you should see the APPC Docker Image’s name as
      “onap/appc-image” twice with different tags. The number of
      tags for the image will be decided by what is defined on the
      docker maven plugin’s section (note that there are properties to
      be defined in the tags section)

   |image18|

   -  As you change the tag names as more tags are uploaded on your
      local docker registry, we have experienced scenarios where the
      “latest” tag will not always be the actual latest version of the
      image you last uploaded. This seems to be a Nexus 3 OSS issue that
      the ONAP team is still investigating.

-  Now that the APPC Deployment Maven artifacts are deployed in Nexus 2
   OSS and the APPC Docker Image is deployed in the Nexus 3 OSS local
   repositories, you are ready to test the docker image. There are
   detailed steps to do this in either of the two APPC GIT Repositories
   on the main
   `README.md <https://gerrit.onap.org/r/gitweb?p=appc.git;a=blob;f=README.md;h=9024ed1f4aae36a072ee1f4610920e69ac1eaef5;hb=HEAD>`__
   section.

.. |image0| image:: images/image0.png
.. |image1| image:: images/image1.png
.. |image2| image:: images/image2.png
.. |image3| image:: images/image3.png
.. |image4| image:: images/image4.png
.. |image5| image:: images/image5.png
.. |image6| image:: images/image6.png
.. |image7| image:: images/image7.png
.. |image8| image:: images/image8.png
.. |image9| image:: images/image9.png
.. |image10| image:: images/image10.png
.. |image11| image:: images/image11.png
.. |image12| image:: images/image12.png
.. |image13| image:: images/image13.png
.. |image14| image:: images/image14.png
.. |image15| image:: images/image15.png
.. |image16| image:: images/image16.png
.. |image17| image:: images/image17.png
.. |image18| image:: images/image18.png
