.. This work is licensed under a
.. Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2019 Amdocs, Bell Canada

.. _quick-start-label:

OOM Quick Start Guide
#####################

.. figure:: oomLogoV2-medium.png
   :align: right

Once a kubernetes environment is available (follow the instructions in
:ref:`cloud-setup-guide-label` if you don't have a cloud environment
available), follow the following instructions to deploy ONAP.

**Step 1.** Clone the OOM repository from ONAP gerrit::

  > git clone -b <BRANCH> http://gerrit.onap.org/r/oom --recurse-submodules
  > cd oom/kubernetes

where <BRANCH> can be an offical release tag, such as
4.0.0-ONAP for Dublin
5.0.1-ONAP for El Alto

**Step 2.** Install Helm Plugins required to deploy ONAP::

  > sudo cp -R ~/oom/kubernetes/helm/plugins/ ~/.helm


**Step 3.** Customize the helm charts like oom/kubernetes/onap/values.yaml or an override
file like onap-all.yaml, onap-vfw.yaml or openstack.yaml file to suit your deployment with items like the
OpenStack tenant information.

.. note::
  Standard and example override files (e.g. onap-all.yaml, openstack.yaml) can be found in
  the oom/kubernetes/onap/resources/overrides/ directory.


 a. You may want to selectively enable or disable ONAP components by changing
    the `enabled: true/false` flags.


 b. Encyrpt the OpenStack password using the shell tool for robot and put it in
    the robot helm charts or robot section of openstack.yaml


 c. Encrypt the OpenStack password using the java based script for SO helm charts
    or SO section of openstack.yaml.


 d. Update the OpenStack parameters that will be used by robot, SO and APPC helm
    charts or use an override file to replace them.




a. Enabling/Disabling Components:
Here is an example of the nominal entries that need to be provided.
We have different values file available for different contexts.

.. literalinclude:: onap-values.yaml
   :language: yaml


b. Generating ROBOT Encrypted Password:
The ROBOT encrypted Password uses the same encryption.key as SO but an
openssl algorithm that works with the python based Robot Framework.

.. note::
  To generate ROBOT openStackEncryptedPasswordHere :

  ``cd so/resources/config/mso/``

  ``/oom/kubernetes/so/resources/config/mso# echo -n "<openstack tenant password>" | openssl aes-128-ecb -e -K `cat encryption.key` -nosalt | xxd -c 256 -p``

c. Generating SO Encrypted Password:
The SO Encrypted Password uses a java based encryption utility since the
Java encryption library is not easy to integrate with openssl/python that
ROBOT uses in Dublin.

.. note::
  To generate SO openStackEncryptedPasswordHere and openStackSoEncryptedPassword:

  SO_ENCRYPTION_KEY=`cat ~/oom/kubernetes/so/resources/config/mso/encryption.key`

  OS_PASSWORD=XXXX_OS_CLEARTESTPASSWORD_XXXX

  git clone http://gerrit.onap.org/r/integration

  cd integration/deployment/heat/onap-rke/scripts


  javac Crypto.java

  [ if javac is not installed 'apt-get update ; apt-get install default-jdk' ]

  java Crypto "$OS_PASSWORD" "$SO_ENCRYPTION_KEY"


d. Update the OpenStack parameters:

There are assumptions in the demonstration VNF heat templates about the networking 
available in the environment. To get the most value out of these templates and the 
automation that can help confirm the setup is correct, please observe the following 
constraints.

openStackPublicNetId: 

This network should allow heat templates to add interfaces. 
This need not be an external network, floating IPs can be assigned to the ports on 
the VMs that are created by the heat template but its important that neutron allow 
ports to be created on them.

openStackPrivateNetCidr: "10.0.0.0/16"

This ip address block is used to assign OA&M addresses on VNFs to allow ONAP connectivity.
The demonstration heat templates assume that 10.0 prefix can be used by the VNFs and the 
demonstration ip addressing plan embodied in the preload template prevent conflicts when 
instantiating the various VNFs. If you need to change this, you will need to modify the preload 
data in the robot helm chart like integration_preload_parametes.py and the demo/heat/preload_data 
in the robot container. The size of the CIDR should be sufficient for ONAP and the VMs you expect 
to create.

openStackOamNetworkCidrPrefix: "10.0"

This ip prefix mush match the openStackPrivateNetCidr and is a helper variable to some of the
robot scripts for demonstration. A production deployment need not worry about this
setting but for the demonstration VNFs the ip asssignment strategy assumes 10.0 ip prefix.


Example Keystone v2.0 
.. literalinclude:: example-integration-override.yaml
   :language: yaml

Example Keystone v3  (required for Rocky and later releases)
.. literalinclude:: example-integration-override-v3.yaml
   :language: yaml



**Step 4.** To setup a local Helm server to server up the ONAP charts::

  > helm serve &

Note the port number that is listed and use it in the Helm repo add as
follows::

  > helm repo add local http://127.0.0.1:8879

**Step 5.** Verify your Helm repository setup with::

  > helm repo list
  NAME   URL
  local  http://127.0.0.1:8879

**Step 6.** Build a local Helm repository (from the kubernetes directory)::

  > make all; make onap

**Step 7.** Display the onap charts that available to be deployed::

  > helm search onap -l

.. literalinclude:: helm-search.txt

.. note::
  The setup of the Helm repository is a one time activity. If you make changes to your deployment charts or values be sure to use `make` to update your local Helm repository.

**Step 8.** Once the repo is setup, installation of ONAP can be done with a
single command

.. note::
  The --timeout 900 is currently required in Dublin to address long running initialization tasks
  for DMaaP and SO. Without this timeout value both applications may fail to deploy.

To deploy all ONAP applications use this command::

    > cd oom/kubernetes
    > helm deploy dev local/onap --namespace onap -f onap/resources/overrides/onap-all.yaml -f onap/resources/overrides/environment.yaml -f onap/resources/overrides/openstack.yaml --timeout 900

All override files may be customized (or replaced by other overrides) as per needs.

onap-all.yaml

  Enables the modules in the ONAP deployment. As ONAP is very modular, it is possible to customize ONAP and disable some components through this configuration file.

environment.yaml

  Includes configuration values specific to the deployment environment.

  Example: adapt readiness and liveness timers to the level of performance of your infrastructure

openstack.yaml

  Includes all the Openstack related information for the default target tenant you want to use to deploy VNFs from ONAP and/or additional parameters for the embedded tests.

**Step 9.** Verify ONAP installation

Use the following to monitor your deployment and determine when ONAP is ready for use::

  > kubectl get pods -n onap -o=wide

.. note::
  While all pods may be in a Running state, it is not a guarantee that all components are running fine.

  Launch the healthcheck tests using Robot to verify that the components are healthy.

  > ~/oom/kubernetes/robot/ete-k8s.sh onap health

**Step 10.** Undeploy ONAP

> helm undeploy dev --purge

More examples of using the deploy and undeploy plugins can be found here: https://wiki.onap.org/display/DW/OOM+Helm+%28un%29Deploy+plugins
