Deny updates to AWS::EC2::VolumeAttachment

In accordance with AWS docs [1] AWS VolumeAttachment does not support
updates of any of its properties.

[1] http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volumeattachment.html

Change-Id: I6d79536c68bed60d9b86c662147e35a9b2da6c1c
Closes-Bug: #1340096
Error class can accept message with format characters

Since the Error class is designed to simply accept any message string,
treating the message text as a format string causes errors if the
error message has format characters. This changes Error to have its
own format string that just echos the passed in message.

Change-Id: I1161d5e177dff860e180f845405d536e18222b23
Closes-Bug: 1361471
ResourceGroup build from list of resource names

This changes ResourceGroup internal implementation to be driven by
a list of resource names rather than a count of resources.

This maintains the current behaviour of sequential number resource
names, while allowing subclasses to choose a completely different
resource name scheme.

Change-Id: I17d046155f8d830ced789ede6a969ac4f125576d
Partial-Blueprint: deployment-multiple-servers
ResourceGroup make do_prop_replace class method

This refactor allows subclasses to override _do_prop_replace so
that properties can be populated by the specific needs of the subclass.

Change-Id: I1ebe382b8efd010e128fa9c452d5ddb580237c1e
Partial-Blueprint: deployment-multiple-servers
Provide access to outputs from OS::Heat::ResourceGroup

To align with the related OS::Heat::AutoScalingGroup change:
Ib9e830e0c54602ac456d64179e1df30f0778906d

This adds an 'attributes' attribute to the OS::Heat::ResourceGroup resource
so that the following:
  {'get_attr': ['my_asg', 'attributes', 'networks', '<network_name>', 0]}
returns a mapping from resource names to the corresponding IP addresses.

There is no need for an outputs_list attribute since the following already
returns a list:
  {'get_attr': ['my_rg', 'networks', '<network_name>', 0]}

To align ResourceGroup with OS::Heat::AutoScalingGroup, there will
be a proposed change to OS::Heat::AutoScalingGroup to rename the
following attributes:
- outputs -> attributes
- outputs_list -> attributes_list

Change-Id: Id51f23533ae75ca5d883a4f67e75ac9513a67264
Implement OS::Heat::SoftwareDeployments

This is a resource which subclasses ResourceGroup to deploy a group
of OS::Heat::SoftwareDeployment resources

The main difference in properties between this resource and
OS::Heat::SoftwareDeployment is that it has a 'servers' property
instead of 'server'. The servers property expects a map of
resource-name/nova-uuid pairs. The resource name is used as the
deployment resource name inside the group, and the nova-uuid is used
as the server to deploy to.

The attributes deploy_stdouts, deploy_stderrs, deploy_status_codes
each return a map where the key is the server name and the value
is the respective attribute from the deployment resource.

Change-Id: Ide1e8fb57d45062e5d459b484135a5cad6d2c7dc
Partial-Blueprint: deployment-multiple-servers
Implement OS::Heat::StructuredDeployments

This is a resource which subclasses SoftwareDeployments to deploy a group
of OS::Heat::StructuredDeployment resources

Change-Id: I5f9603c68bb7cd81ef60a6b2ba965e5b8e93887a
Implements-Blueprint: deployment-multiple-servers
Implement OS::Sahara::Cluster resource

* This patch implements resource for Hadoop cluster provisioned by
  Sahara based on Sahara's cluster template.
* Heat template for stack based on this resource should have minimal set
  of fields needed to provision cluster.
* To successfully provision cluster the following steps should be done:
  - Sahara enabled and working in your env
  - Sahara contains valid cluster template [1]
  - Sahara's image registry contains registered image with preinstalled
    Hadoop components [2]

[1] http://docs.openstack.org/developer/sahara/restapi/rest_api_v1.0.html#create-cluster-template
[2] http://docs.openstack.org/developer/sahara/devref/quickstart.html#upload-image-to-glance

Co-Authored-By: Pavlo Shchelokovskyy <pshchelokovskyy@mirantis.com>

Implements: blueprint sahara-as-heat-resource

Change-Id: If470511cbb88349f47a61a35b1a19ba7c68efd83
Refactor nested stack create/update/preview

The bug #1357433 was caused by the fact that stack parsing for a stack
resource on create/update/preview is pretty similar but repeated in all
three places.  This refactors them to move common logic to a single
place, making sure all validation in consistent and all params are
passed in the same way.

Closes-Bug: #1357433
Change-Id: I20ee7f9a6dbf047798b0cc954aa861f774e683b9
Merge "Refactor nested stack create/update/preview"
Merge "Implement OS::Sahara::Cluster resource"
Merge "Error class can accept message with format characters"
Merge "Deny updates to AWS::EC2::VolumeAttachment"
Merge "ResourceGroup build from list of resource names"
Merge "ResourceGroup make do_prop_replace class method"
Merge "Provide access to outputs from OS::Heat::ResourceGroup"
Merge "Implement OS::Heat::SoftwareDeployments"
Merge "Implement OS::Heat::StructuredDeployments"