ONAP HEAT Template
------------------

Source files
~~~~~~~~~~~~

- 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

Description
~~~~~~~~~~~

The ONAP HEAT template spins up the entire ONAP platform. The template,
onap\_openstack.yaml, comes with an environment file,
onap\_openstack.env, in which all the default values are defined.

.. note::
 onap\_openstack.yaml AND onap\_openstack.env ARE THE HEAT TEMPLATE
 AND ENVIRONMENT FILE CURRENTLY SUPPORTED.
 onap\_openstack\_float.yaml/env AND onap\_openstack\_nofloat.yaml/env
 AREN'T UPDATED AND THEIR USAGE IS NOT SUGGESTED.

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 to create the public/private key pair occur:

::

 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

**DNS 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

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

**DCAE Parameters**

DCAE spins up ONAP's data collection and analytics system in two phases.
The first is the launching of a bootstrap VM that is specified in the
ONAP Heat template. This VM requires a number of deployment specific
conifiguration 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. DCAE VMs are
connected to the same internal network as the rest of ONAP VMs, but
dynamically spun up by the DCAE core platform. 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 underying 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. 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 KEYSTONE URL OF THE OPENSTACK INSTANCE WHERE DCAE IS DEPLOYED (Note: put the MultiCloud proxy URL if the DNSaaS is proxyed by MultiCloud)
 dcae_centos_7_image: PUT THE CENTOS7 IMAGE ID/NAME AVAILABLE AT THE OPENSTACK INSTANCE WHERE DCAE IS DEPLOYED
 dcae_security_group: PUT THE SECURITY GROUP ID/NAME TO BE USED AT THE OPENSTACK INSTANCE WHERE DCAE IS DEPLOYED
 dcae_key_name: PUT THE ACCESS KEY-PAIR NAME REGISTER AT THE OPENSTACK INSTANCE WHERE DCAE IS DEPLOYED
 dcae_public_key: PUT THE PUBLIC KEY OF A KEY-PAIR USED FOR DCAE BOOTSTRAP NODE TO COMMUNICATE WITH DCAE VMS
 dcae_private_key: PUT THE PRIVATE KEY OF A KEY-PAIR USED FOR DCAE BOOTSTRAP NODE TO COMMUNICATE WITH DCAE VMS

 dnsaas_config_enabled: true or false FOR WHETHER DNSAAS IS PROXYED
 dnsaas_region: PUT THE REGION OF THE OPENSTACK INSTANCE WHERE DNSAAS IS PROVIDED
 dnsaas_tenant_id: PUT THE TENANT ID/NAME OF THE OPENSTACK INSTANCE WHERE DNSAAS IS PROVIDED
 dnsaas_keystone_url: PUT THE KEYSTONE URL OF THE OPENSTACK INSTANCE WHERE DNSAAS IS PROVIDED
 dnsaas_username: PUT THE USERNAME OF THE OPENSTACK INSTANCE WHERE DNSAAS IS PROVIDED
 dnsaas_password: PUT THE PASSWORD OF THE OPENSTACK INSTANCE WHERE DNSAAS IS PROVIDED

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:**

- Install the HEAT client on your machine, e.g. in Ubuntu (ref. http://docs.openstack.org/user-guide/common/cli-install-openstack-command-line-clients.html):

::

 apt-get install python-dev python-pip
 pip install python-heatclient        # Install heat client
 pip install python-openstackclient   # Install the Openstack client to support multiple services

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

::

 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

-  Run the script from command line:

::

 source ~/openstack/openrc

-  In order to install the ONAP platform, type:

::

 heat stack-create STACK_NAME -f PATH_TO_HEAT_TEMPLATE(YAML FILE) -e PATH_TO_ENV_FILE       # Old HEAT client, OR
 openstack stack create -t PATH_TO_HEAT_TEMPLATE(YAML FILE) -e PATH_TO_ENV_FILE STACK_NAME  # New Openstack client

