.. This work is licensed under a Creative Commons Attribution 4.0
   International License.
   http://creativecommons.org/licenses/by/4.0
   Copyright 2017-2018 ONAP


.. contents::
   :depth: 2
..

.. index:: Setting Up Full ONAP


========================
**Setting Up Full ONAP**
========================

.. _demo-installing-running-onap:

**Context**
===========
ONAP may be deployed in different contexts depending on your requirements.
The recommended installation for Beijng Release over virtual machines is based
on OpenStack HEAT Template.

Using the Beijing HEAT Template installer, ONAP can be deployed in a single
tenant or multiple tenants. One tenant for all the components except DCAE, and
another tenant dedicated to the DCAE components.

The VNFs managed by ONAP may be deployed in different OpenStack tenants or
based on top of VMware based infrastructure. For details, refer
:ref:`to MultiCloud project<index-multicloud>`.

The current installation is based on the single tenant deployment (all the ONAP
components will be hosted in a unique tenant) with DCAE components deployed in
High Availability mode.

The installation requires some manual tasks to setup the DCAE components.

.. _demo-installing-running-onap-requirements:

**Requirements**
================

OpenStack
---------
ONAP installation is validated on
`OpenStack Ocata <https://releases.openstack.org/ocata/>`_ or latter release.

You can use various Cloud providers offering OpenStack based solutions.
A list of available Cloud providers on the
`OpenStack marketplace <https://www.openstack.org/marketplace/public-clouds/>`_.

You can use your private Cloud infrastructure.

The following OpenStack components must be deployed in the infrastructure:
 - *Cinder*
 - *Designate*
 - *Glance*
 - *Heat*
 - *Horizon*
 - *Keystone*
 - *Neutron*
 - *Nova*

To deploy OpenStack, you can use various solutions:
 - `OpenStack installation guide <https://docs.openstack.org/install-guide/>`_
 - `OPNFV Cross Community Continuous Integration - XCI installer <http://docs.opnfv.org/en/latest/infrastructure/xci.html>`_
 - `OpenStack Ocata installation guide <https://docs.openstack.org/ocata/install/>`_

.. tip::
 - Notice the documentation version mentioned in the URL, e.g. ocata/, pike/,
   latest/ ...
 - The installation is pretty huge, some automated scripts have been created by
   the community:

  - `OpenStack installation with Ansible (All openstack services) <https://docs.openstack.org/openstack-ansible/latest/>`_
  - `OpenStack Ocata installation scripts for testing environment(DO NOT install Heat, Designate and Cinder Volume services) <https://github.com/reachsrirams/openstack-scripts>`_

Use the procedure below to deploy and configure *Designate* manually

.. toctree::
   :maxdepth:	 1

   install-designate.rst


The OpenStack infrastructure must enable internet access and you need to have
an "External network" already configured properly.
The External network ID will have to be provided in the Heat environment file.

ONAP components
---------------
The following table presents the mapping between the created VM and the ONAP
components, and provides VM information (flavor and image):

    ===================  =================   =======  ============
    VM name              ONAP project(s)     Flavor   Image
    ===================  =================   =======  ============
    onap-aai-inst1       AAI                 xlarge   Ubuntu 14.04
    onap-aai-inst2       AAI/UI              xlarge   Ubuntu 14.04
    onap-appc            APPC, CCSDK         large    Ubuntu 14.04
    onap-clamp           CLAMP               medium   Ubuntu 16.04
    onap-dns-server      *Internal DNS*      small    Ubuntu 14.04
    onap-message-router  DMAAP               large    Ubuntu 14.04
    onap-multi-service   MSB, VF-C, VNFSDK   xxlarge  Ubuntu 16.04
    onap-policy          Policy              xlarge   Ubuntu 14.04
    onap-portal          Portal, CLI         large    Ubuntu 14.04
    onap-robot           Integration         medium   Ubuntu 16.04
    onap-sdc             SDC                 xlarge   Ubuntu 16.04
    onap-sdnc            SDNC, CCSDK         large    Ubuntu 14.04
    onap-so              SO                  large    Ubuntu 16.04
    onap-vid             VID                 medium   Ubuntu 14.04
    onap-dcae-bootstrap  DCAE, Holmes        small    Ubuntu 14.04
    dcaeorcl00           DCAE/Orchestr.      medium   CentOS 7
    dcaecnsl00           DCAE/Consul         medium   Ubuntu 16.04
    dcaecnsl01           DCAE/Consul         medium   Ubuntu 16.04
    dcaecnsl02           DCAE/Consul         medium   Ubuntu 16.04
    dcaedokp00           DCAE/Policy Hand.   medium   Ubuntu 16.04
    dcaedoks00           DCAE/VES, Holmes    medium   Ubuntu 16.04
    dcaepgvm00           DCAE/Postrges       medium   Ubuntu 16.04
    dcaecdap00           DCAE/CDAP           large    Ubuntu 16.04
    dcaecdap01           DCAE/CDAP           large    Ubuntu 16.04
    dcaecdap02           DCAE/CDAP           large    Ubuntu 16.04
    dcaecdap03           DCAE/CDAP           large    Ubuntu 16.04
    dcaecdap04           DCAE/CDAP           large    Ubuntu 16.04
    dcaecdap05           DCAE/CDAP           large    Ubuntu 16.04
    dcaecdap06           DCAE/CDAP           large    Ubuntu 16.04
    ===================  =================   =======  ============

Footprint
---------
The ONAP installation requires the following footprint:
 - 29 VM
 - 148 vCPU
 - 336 GB RAM
 - 3 TB Storage
 - 29 floating IP addresses

.. Note: The default flavor size may be optimized. The ONAP community is
   working to update flavors of basic ONAP installation.

.. Note: You should also reserve some resources for the VNFs to be deployed.

Artifacts
---------
The following artifacts must be deployed on the OpenStack infrastructure:
 - a public SSH key to access the various VM
 - private SSH key and public key SSH key for the DCAE VM
 - Ubuntu 14.04 image (https://cloud-images.ubuntu.com/releases/14.04/14.04/)
 - Ubuntu 16.04 image (https://cloud-images.ubuntu.com/releases/16.04/release/)
 - CentOS 7 image (http://cloud.centos.org/centos/7/images/)
 - Set of flavors: small, medium, large, medium, large, xlarge, xxlarge

.. Note: The floating IP may be private IP.

.. Note: Basic flavors can reuse the default flavors as defined by
   OpenStack
   <https://docs.openstack.org/horizon/latest/admin/manage-flavors.html>`_
   The xxlarge flavor should be configured using the following values:
   12 vCPU, 64 GB RAM and 120 GB storage.

Security
--------
The default installation assumes that the Default security group is configured
to enable full access between the ONAP components.
Depending on your environment, we may need to open some security groups
(eg when using the portal from your desktop).

The list of various services and ports used can be found on the
`ONAP wiki - ports <https://wiki.onap.org/display/DW/ONAP+Services+List#ONAPServicesList-ONAPServices>`_.

**Deployment**
==============

Source files
------------

Both following files must be downloaded and configured to match your
configuration:

- Template file:
  https://git.onap.org/demo/plain/heat/ONAP/onap_openstack.yaml
- Environment file:
  https://git.onap.org/demo/plain/heat/ONAP/onap_openstack.env

The environment file must be customized as described in the following sections.

.. Note Beijing release files

Description
-----------

The ONAP HEAT template spins up all the components expect the DCAE.
The template, onap_openstack.yaml, comes with an environment file,
onap_openstack.env, in which all the default values are defined.

The HEAT template is composed of two sections: (i) parameters, and (ii)
resources.
The parameter section contains the declaration and
description of the parameters that will be used to spin up ONAP, such as
public network identifier, URLs of code and artifacts repositories, etc.
The default values of these parameters can be found in the environment
file.

The resource section contains the definition of:

- ONAP Private Management Network, which ONAP components use to communicate
  with each other and with VNFs
- ONAP Virtual Machines (VMs)
- Public/private key pair used to access ONAP VMs
- Virtual interfaces towards the ONAP Private Management Network
- Disk volumes

Each VM specification includes Operating System image name, VM size
(i.e. flavor), VM name, etc. Each VM has two virtual network interfaces:
one towards the public network and one towards the ONAP Private
Management network, as described above. Furthermore, each VM runs a
post-instantiation script that downloads and installs software
dependencies (e.g. Java JDK, gcc, make, Python, ...) and ONAP software
packages and Docker containers from remote repositories.

When the HEAT template is executed, the OpenStack HEAT engine creates
the resources defined in the HEAT template, based on the parameters
values defined in the environment file.

Environment file
----------------

Before running HEAT, it is necessary to customize the environment file.
Indeed, some parameters, namely public_net_id, pub_key,
openstack_tenant_id, openstack_username, and openstack_api_key,
need to be set depending on the user's environment:

**Global parameters**

::

 public_net_id:       PUT YOUR NETWORK ID/NAME HERE
 pub_key:             PUT YOUR PUBLIC KEY HERE
 openstack_tenant_id: PUT YOUR OPENSTACK PROJECT ID HERE
 openstack_username:  PUT YOUR OPENSTACK USERNAME HERE
 openstack_api_key:   PUT YOUR OPENSTACK PASSWORD HERE
 horizon_url:         PUT THE HORIZON URL HERE
 keystone_url:        PUT THE KEYSTONE URL HERE (do not include version number)

openstack_region parameter is set to RegionOne (OpenStack default). If
your OpenStack is using another Region, please modify this parameter.

public_net_id is the unique identifier (UUID) or name of the public
network of the cloud provider. To get the public_net_id, use the
following OpenStack CLI command (ext is the name of the external
network, change it with the name of the external network of your
installation)

::

 openstack network list  | grep ext |  awk '{print $2}'

pub_key is string value of the public key that will be installed in
each ONAP VM. To create a public/private key pair in Linux, please
execute the following instruction:

::

 user@ubuntu:~$ ssh-keygen -t rsa

The following operations create the public/private key pair:

::

 Generating public/private rsa key pair.
 Enter file in which to save the key (/home/user/.ssh/id_rsa):
 Created directory '/home/user/.ssh'.
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:
 Your identification has been saved in /home/user/.ssh/id_rsa.
 Your public key has been saved in /home/user/.ssh/id_rsa.pub.

openstack_username, openstack_tenant_id (password), and
openstack_api_key are user's credentials to access the
OpenStack-based cloud.

**Images and flavors parameters**

::

 ubuntu_1404_image:  PUT THE UBUNTU 14.04 IMAGE NAME HERE
 ubuntu_1604_image:  PUT THE UBUNTU 16.04 IMAGE NAME HERE
 flavor_small:       PUT THE SMALL FLAVOR NAME HERE
 flavor_medium:      PUT THE MEDIUM FLAVOR NAME HERE
 flavor_large:       PUT THE LARGE FLAVOR NAME HERE
 flavor_xlarge:      PUT THE XLARGE FLAVOR NAME HERE
 flavor_xxlarge:     PUT THE XXLARGE FLAVOR NAME HERE

To get the images in your OpenStack environment, use the following
OpenStack CLI command:

::

        openstack image list | grep 'ubuntu'

To get the flavor names used in your OpenStack environment, use the
following OpenStack CLI command:

::

        openstack flavor list

**Network parameters**

::

 dns_list: PUT THE ADDRESS OFTHE EXTERNAL DNS HERE (e.g. a comma-separated list
 of IP addresses in your /etc/resolv.conf in UNIX-based Operating Systems).
 THIS LIST MUST INCLUDE THE DNS SERVER THAT OFFERS DNS AS AS SERVICE
 see DCAE section below for more details)
 external_dns: PUT THE FIRST ADDRESS OF THE EXTERNAL DNS LIST HERE
 oam_network_cidr: 10.0.0.0/16
 dns_forwarder: PUT THE IP OF DNS FORWARDER FOR ONAP DEPLOYMENT'S OWN DNS SERVER
 oam_network_cidr: 10.0.0.0/16

You can use the Google Public DNS 8.8.8.8 and 4.4.4.4 address or your internal
DNS servers.

ONAP installs a DNS server used to resolve IP addresses in the ONAP OAM private
network.
ONAP Beijing Release also requires OpenStack Designate DNS support for the
DCAE platform, so as to allow IP address discovery and communication among
DCAE elements.
This is required because the ONAP HEAT template only installs the DCAE
bootstrap container, which will in turn install the entire DCAE platform.
As such, at installation time, the IP addresses of the DCAE components are
unknown.

The DNS server that ONAP installs needs to be connected to the Designate DNS to
allow communication between the DCAE elements and the other ONAP components.
To this end, dns\_list, external\_dns, and dns\_forwarder should all have the
IP address of the Designate DNS.
These three parameters are redundant, but still required for Beijing Release.
Originally, dns\_list and external\_dns were both used to circumvent some
limitations of older OpenStack versions.
In future releases, the DNS settings and parameters in HEAT will be
consolidated.
The Designate DNS is configured to access the external DNS.
As such, the ONAP DNS will forward to the Designate DNS the queries from ONAP
components to the external world.
The Designate DNS will then forward those queries to the external DNS.

**DCAE Parameters**

DCAE spins up ONAP's data collection and analytics system in two phases.

The first phase consists of launching a bootstrap VM that is specified in the
ONAP HEAT template, as described above. This VM requires a number of
deployment-specific configuration parameters being provided so that it can
subsequently bring up the DCAE system.

There are two groups of parameters:

- The first group relates to the launching of DCAE VMs, including parameters
  such as the keystone URL and additional VM image IDs/names. Hence these
  parameters need to be provided to DCAE. Note that although DCAE VMs will be
  launched in the same tenant as the rest of ONAP, because DCAE may use
  MultiCloud node as the agent for interfacing with the underlying cloud, it
  needs a separate keystone URL (which points to MultiCloud node instead of
  the underlying cloud).


- The second group of configuration parameters relate to DNS As A Service
  support(DNSaaS). DCAE requires DNSaaS for registering its VMs into
  organization-wide DNS service. For OpenStack, DNSaaS is provided by
  Designate, as mentioned above.
  Designate support can be provided via an integrated service endpoint listed
  under the service catalog of the OpenStack installation; or proxyed by the
  ONAP MultiCloud service. For the latter case, a number of parameters are
  needed to configure MultiCloud to use the correct Designate service.

These parameters are described below:

::

 dcae_keystone_url: PUT THE MULTIVIM PROVIDED KEYSTONE API URL HERE
 dcae_centos_7_image: PUT THE CENTOS7 VM IMAGE NAME HERE FOR DCAE LAUNCHED CENTOS7 VM
 dcae_domain: PUT THE NAME OF DOMAIN THAT DCAE VMS REGISTER UNDER
 dcae_public_key: PUT THE PUBLIC KEY OF A KEYPAIR HERE TO BE USED BETWEEN DCAE LAUNCHED VMS
 dcae_private_key: PUT THE SECRET KEY OF A KEYPAIR HERE TO BE USED BETWEEN DCAE LAUNCHED VMS

 dnsaas_config_enabled: PUT WHETHER TO USE PROXYED DESIGNATE
 dnsaas_region: PUT THE DESIGNATE PROVIDING OPENSTACK'S REGION HERE
 dnsaas_keystone_url: PUT THE DESIGNATE PROVIDING OPENSTACK'S KEYSTONE URL HERE
 dnsaas_tenant_name: PUT THE TENANT NAME IN THE DESIGNATE PROVIDING OPENSTACK HERE (FOR R1 USE THE SAME AS openstack_tenant_name)
 dnsaas_username: PUT THE DESIGNATE PROVIDING OPENSTACK'S USERNAME HERE
 dnsaas_password: PUT THE DESIGNATE PROVIDING OPENSTACK'S PASSWORD HERE

Instantiation
-------------

The ONAP platform can be instantiated via Horizon (OpenStack dashboard)
or Command Line.

**Instantiation via Horizon:**

- Login to Horizon URL with your personal credentials
- Click "Stacks" from the "Orchestration" menu
- Click "Launch Stack"
- Paste or manually upload the HEAT template file (onap_openstack.yaml) in the
  "Template Source" form
- Paste or manually upload the HEAT environment file (onap_openstack.env) in
  the "Environment Source" form
- Click "Next" - Specify a name in the "Stack Name" form
- Provide the password in the "Password" form
- Click "Launch"

**Instantiation via Command Line:**

- You need to have the OpenStack Heat service installed:

- Create a file (named i.e. ~/openstack/openrc) that sets all the
  environmental variables required to access your OpenStack tenant:

::

 export OS_AUTH_URL=INSERT THE AUTH URL HERE
 export OS_USERNAME=INSERT YOUR USERNAME HERE
 export OS_TENANT_ID=INSERT YOUR TENANT ID HERE
 export OS_REGION_NAME=INSERT THE REGION HERE
 export OS_PASSWORD=INSERT YOUR PASSWORD HERE
 export OS_USER_DOMAIN_NAME=INSERT YOUR DOMAIN HERE
 export OS_PROJECT_NAME=INSERT YOUR PROJECT NAME HERE

-  Run the script from command line:

::

 source ~/openstack/openrc

-  In order to install the ONAP platform, type:

::

 # Old HEAT client
 heat stack-create STACK_NAME -f PATH_TO_HEAT_TEMPLATE(YAML FILE)
 -e PATH_TO_ENV_FILE

 OR

 # New OpenStack client
 openstack stack create -t PATH_TO_HEAT_TEMPLATE(YAML FILE)
 -e PATH_TO_ENV_FILE STACK_NAME


.. Note The HEAT template deployment may take time (up to one hour)
   depending on your hardware environment.

Deploy DCAE
-----------
The HEAT template deployed the onap-dcae-bootstrap virtual machine.

.. Note To provide the manual tasks to configure the local environment


Test the installation
---------------------
Every ONAP component offers a HealthCheck REST API. The Robot Virtual Machine
(*onap-robot*) can be used to test that every components run smoothly.
Run the following command to perform the HealthCheck:

.. code-block:: bash

  docker exec -it openecompete_container /var/opt/OpenECOMP_ETE/runTags.sh
  -i health
  -d ./html
  -V /share/config/integration_robot_properties.py
  -V /share/config/integration_preload_parameters.py
  -V /share/config/vm_properties.py

This test suite will execute 30 tests towards the various ONAP components.

After the installation, it is possible to deploy the various use-cases
described in `ONAP wiki - demos <https://wiki.onap.org/display/DW/Running+the+ONAP+Demos>`_.

Detect problems
---------------
If all the tests are not OK, many causes are possible.
Here is a simple procedure to detect where the problem occurs:

* Check the OpenStack Virtual Machine logs
* Connect to the Virtual Machine and check that the various containers are
  running.

The list of containers are described on the `ONAP wiki - containers <https://wiki.onap.org/display/DW/ONAP+Services+List#ONAPServicesList-ONAPServices>`_.
In case some containers are missing, check the Docker logs using the following
command:

.. code-block:: bash

 sudo docker ps -a
 sudo docker logs <containerid>

**Portal configuration**
========================
The current ONAP installation is using the *onap.org* domain.
To use the portal on your desktop, you must configure the following information
in your *host* file (located in /etc/host for Linux or
/windows/system32/drivers/etc/hosts for Windows):

.. code-block:: bash

 <onap-policy_ip>      policy.api.simpledemo.onap.org
 <onap-portal_ip>      portal.api.simpledemo.onap.org
 <onap-sdc_ip>         sdc.api.simpledemo.onap.org
 <onap-vid_ip>         vid.api.simpledemo.onap.org
 <onap-aai-inst1_ip>   aai.api.simpledemo.onap.org
 <onap-aai-inst2_ip>   aai.ui.simpledemo.onap.org


You can use the Horizon dashboard to get the IP addresses associated with the
Virtual Machines or use the following command line:

.. code-block:: bash

 openstack server list

Launch the portal on the
http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm

Various users are predefined as presented in the following table:

  .. csv-table::
   :header: Role, Login
   :widths: 20, 20

    Superuser,demo
    Designer,cs0008
    Tester,jm0007
    Governor,gv0001
    Ops,op0001

The password is *demo123456!*

Go to the `Portal component user guide
<http://onap.readthedocs.io/en/latest/submodules/portal.git/docs/index.html>`_

Other UI documentation:
 - `CLAMP  <http://onap.readthedocs.io/en/latest/submodules/clamp.git/docs/index.html>`_
 - `SDC <http://onap.readthedocs.io/en/latest/submodules/sdc.git/docs/index.html>`_
 - `UI Use-Case <http://onap.readthedocs.io/en/latest/submodules/usecase-ui.git/docs/index.html>`_


**Components**
==============

The list of various services and ports used can be found on the
`ONAP wiki - services <https://wiki.onap.org/display/DW/ONAP+Services+List#ONAPServicesList-ONAPServices>`_

.. This work is licensed under a Creative Commons Attribution 4.0 International License.
   http://creativecommons.org/licenses/by/4.0
   Copyright 2017 ONAP


.. contents::
