Heat/Blueprints/FlexibleResourceGroup

< Heat Launchpad Entry: HeatSpec:ScalableResourceGroup

Created: 26 July 2015

Contributors: Ahmed El-Khouly

Summary
OS::Heat::ResourceGroup provides a way to create several instances of identically configured nested resource; resources within the group are identifiable with with their index.

OS::Heat::ResourceGroup can only change number of resources in the group by changing the count property in the Heat template and perform a stack update of on the root stack.

OS::Heat::AutoScalingGroup/Policy provides for a resource group that can change in size(scale) by receiving signals controlling the size change.

There are some cloud applications that need a scalable resource group with the added ability to specify the exact resources to be add or removed from the group.

Release Note
TBD

Rationale
Some cloud applications need a new resource group with the following characteristics: 1) Create an initial number of identically configured nested resources.

2) Identify resources within the group using the index with the ability to specify a variable to be replaced by the index.

3) Add/Remove specific resource within the group by specifying the indices of involved resources.

4) Grow/shrink the group size (with a certain increment) when user defined triggers are met.

User Stories
1) Recreate a (failed) resource by adding/deleting the corresponding nested resource in the group.

2) Create new resources in increments when certain triggers are met.

3) Remove a number resources according to a predefined criteria(increasing or decreasing order of age or index).

4) Specify which resources to remove due to low load periods.

Assumptions
None.

Design
Define a new heat resource type: OS::HEAT::ScalableResourceGroup with the following properties: resource_def : Map Resource definition for the resources in the group. Required property. Can be updated without replacement.

index_var : String A variable that this resource will use to replace with the current index of a given resource in the group. Updates cause replacement. Optional property, defaults to “%index%”.

MAX_SIZE: Integer Maximum number of resources in the group. Optional Property Updates can cause creation/deletion of some resources according to de-grow policy INIT_SIZE: Integer Initial number of resources in the group at creation time. Optional property. Default value is 1.

MIN_SIZE: Integer Min number of resources in the group. Optional property. Updates can cause creation/deletion of some resources according to de-grow policy

DEGROW_Policy:String Controls which resources to remove when during de-grow. Optional property. Possible Values: "Index" or "Age" Default: "Index"

DEGROW_Order:String Optional property. Possible Values: "Increasing" or "Decreasing" Default: "Decreasing"

ScalableResourceGroup class inherits from ResourceGroup: - Provide handle_signal implementation to receive signals to add/delete and grow/degrow signals. - Override create/validate/update/delete handlers.