Added anti-affinity feature to Heat engine

* Now it's possible to create/scale custer with Heat engine and anti-affinity feature for node
  processes
* Changed ClusterTemplate class in heat engine. Now it takes whole
  cluster object during initializing
* Also ClusterTemplate object takes node group extras like userdata
* Added unit-tests for aa during cluster creation
* In addition raised bug #1268610 about scailing cluster with
  anti-affinity process devided into two node groups

Implements: blueprint aa-heat
Partial-Bug: #1259174
Change-Id: If2927877f1ca3f7390fbf5b44929663d089f3382
Fixed wrong instance name with Heat engine

* Added 'name' fields for OS:Nova:Server resources in Heat template
* Now instance names has 03d suffixes as it is in the old savanna engine

Change-Id: I6675f8e9bb613f9df22f7bc061b2fa821479719f
Closes-Bug: #1267454
Enable heat engine to launch cluster without keypair

* Added ability to launch clusters w/o user keypairs attached to instances

Change-Id: I3d39d6f931facbb27d2162a3afc702bd76f76f64
Closes-Bug: #1261326
Enable check of Heat engine for Vanilla and HDP

* New parameter "SSH_USERNAME" to config.py was added. This parameter allows to specify SSH user "ec2-user" for Heat engine testing.
* Also unnecessary blank lines were deleted;
* Also IDs of object names were abbreviated to 8 characters.
    For example:
        old object name was '<object-name>-695e5ce7-fc97-4234-abf7-f93f4a70120a'.
        new object name is '<object-name>-695e5ce7'.

Change-Id: Idadd173dd41dea6ecd2a87ac686cd8c656d0ba64
Add code to configure cluster for external hdfs

* Validation for hdfs data sources in data_source.py
* "hdfs" data source type in base.py
* Function configure_cluster_for_hdfs in hdfs_helper.py
* Fixed job_manager.py to account for hdfs data sources

blueprint epd-data-source-existing-hadoop-cluster

Co-Authored-By: Alexander Kuznetsov <akuznetsov@mirantis.com>
Co-Authored-By: Sergey Reshetnyak <sreshetniak@mirantis.com>

Change-Id: I4def592c3e0c8d2ffcb3d0f958504bb10bbb3407
Ignore key/value pairs with empty keys in workflow generation

Savanna should ignore key/value pairs with empty keys when
generating <property> tags or equal-separated dictionary
entries in workflow.xml.

Partial-bug: #1269972
Change-Id: I327d1f4ac2f5db3a2778678567b63148f41c7932
Change configs["args"] to be a list for Pig jobs

The schema for Pig jobs incorrectly listed "args" as a dictionary.
It should be a list of strings for all job types. Modify the schema
and workflow generation to correctly handle "args" as a list.

There is a UI component to this bug as well.  To avoid having to
sync changes in savanna and savanna-dashboard, temporarily allow
"args" to be passed from the UI as a dictionary and replace it
with an empty list. This will prevent the UI from breaking.

Partial-bug: #1269968

Change-Id: Ieacb0596dbb6da5d5f26dc6a5b923f2bafa819f2
[Vanilla] Updated docs to point to icehouse images

Also updated limitation to be up to date.

Closes-Bug: #1270277

Change-Id: I3875622ae515c4a29c4f5b05357c06d0901d14da
[IDH] Added config controlling hadoop-swift.jar URL

Change-Id: I9defe7a4a84266f5c166a465908744239b4e51a6
Fixes: bug #1267632
Imported Translations from Transifex

Change-Id: I0d1a985da1878f7d03e9d13a3a2490f974d588ad
Merge "[IDH] Added config controlling hadoop-swift.jar URL"
Merge "Ignore key/value pairs with empty keys in workflow generation"
Merge "[Vanilla] Updated docs to point to icehouse images"
Merge "Change configs["args"] to be a list for Pig jobs"
Update EDP doc

* Review in general.
* Add information on Java job types
* Include HDFS for data sources
* Expand the workflow section and give detail on
  each job type plus information on congis, parameters, and args

Change-Id: I059a58cf99d841b5541072105178bade85cf21e1
Add alembic migration tool to sqlalchemy

Implements blueprint alembic-migrations-db

Change-Id: I45202122ab9c8660a152b843a6ad675f6c22bce1
Read Swift credentials from input_data OR output_data

Fix the workflow generation so that Swift username and password
configuration values can be automatically generated from the
input data source or the output data source.  Previously, only
the input data source was considered.  With the addition of
other storage technologies for data sources, it is possible that
only one or the other is in Swift.

Closes-Bug: #1270201

Change-Id: I61434fe658dd6bf30133947f910cfca00fe0e6ca
Merge "Add alembic migration tool to sqlalchemy"
Merge "Added anti-affinity feature to Heat engine"
Merge "Fixed wrong instance name with Heat engine"