On 02/03/16 05:50, Mathieu Velten wrote:
Hi all,
I am looking at a way to spawn nodes in different specified
availability zones when deploying a cluster with Magnum.
Currently Magnum directly uses predefined Heat templates with Heat
parameters to handle configuration.
I tried to reach my goal by sticking to this model, however I couldn't
find a suitable Heat construct that would allow that.
Here are the details of my investigation :
- OS::Heat::ResourceGroup doesn't allow to specify a list as a variable
that would be iterated over, so we would need one ResourceGroup by AZ
- OS::Nova::ServerGroup only allows restriction at the hypervisor level
- OS::Heat::InstanceGroup has an AZs parameter but it is marked
unimplemented , and is CFN specific.
- OS::Nova::HostAggregate only seems to allow adding some metadatas to
a group of hosts in a defined availability zone
- repeat function only works inside the properties section of a
resource and can't be used at the resource level itself, hence
something like that is not allowed :
resources:
repeat:
for_each:
<%az%>: { get_param: availability_zones }
template:
rg-<%az%>:
type: OS::Heat::ResourceGroup
properties:
count: 2
resource_def:
type: hot_single_server.yaml
properties:
availability_zone: <%az%>
The only possibility that I see is generating a ResourceGroup by AZ,
but it would induce some big changes in Magnum to handle
modification/generation of templates.
Any ideas ?
This is a long-standing missing feature in Heat. There are two
blueprints for this (I'm not sure why):
https://blueprints.launchpad.net/heat/+spec/autoscaling-availabilityzones-impl
https://blueprints.launchpad.net/heat/+spec/implement-autoscalinggroup-availabilityzones
The latter had a spec with quite a lot of discussion:
https://review.openstack.org/#/c/105907
And even an attempted implementation:
https://review.openstack.org/#/c/116139/
which was making some progress but is long out of date and would need
serious work to rebase. The good news is that some of the changes I made
in Liberty like https://review.openstack.org/#/c/213555/ should
hopefully make it simpler.
All of which is to say, if you want to help then I think it would be
totally do-able to land support for this relatively early in Newton :)
Failing that, the only think I can think to try is something I am pretty
sure won't work: a ResourceGroup with something like:
availability_zone: {get_param: [AZ_map, "%i"]}
where AZ_map looks something like {"0": "az-1", "1": "az-2", "2":
"az-1", ...} and you're using the member index to pick out the AZ to use
from the parameter. I don't think that works (if "%i" is resolved after
get_param then it won't, and I suspect that's the case) but it's worth a
try if you need a solution in Mitaka.
cheers,
Zane.
__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev