[openstack-dev] [heat] issue of ResourceGroup in Heat template

Zane Bitter zbitter at redhat.com
Thu Mar 24 14:43:38 UTC 2016

On 24/03/16 01:39, Rabi Mishra wrote:
>> On Wed, Mar 23, 2016 at 05:25:57PM +0300, Sergey Kraynev wrote:
>>>     Hello,
>>>     It looks similar on issue, which was discussed here [1]
>>>     I suppose, that the root cause is incorrect using get_attr for your
>>>     case.
>>>     Probably you got "list"  instead of "string".
>>>     F.e. if I do something similar:
>>>     outputs:
>>>       rg_1:
>>>         value: {get_attr: [rg_a, rg_a_public_ip]}
>>>       rg_2:
>>>         value: {get_attr: [rg_a, rg_a_public_ip, 0]}
>>>       rg_3:
>>>         value: {get_attr: [rg_a]}
>>>       rg_4:
>>>         value: {get_attr: [rg_a, resource.0.rg_a_public_ip]}
>>>     where rg_a is also resource group which uses custom template as
>>>     resource.
>>>     the custom template has output value rg_a_public_ip.
>>>     The output for it looks like [2]
>>>     So as you can see, that in first case (like it is used in your example),
>>>     get_attr returns list with one element.
>>>     rg_2 is also wrong, because it takes first symbol from sting with IP
>>>     address.
>> Shouldn't rg_2 and rg_4 be equivalent?
> They are the same for template version 2013-05-23. However, they behave differently
> from the next  version(2014-10-16) onward and return a list of characters. I think
> this is due to the fact that `get_attr` function mapping is changed from 2014-10-16.
> 2013-05-23 -  https://github.com/openstack/heat/blob/master/heat/engine/hot/template.py#L70
> 2014-10-16 -  https://github.com/openstack/heat/blob/master/heat/engine/hot/template.py#L291

Correct. I think that's probably the source of confusion.

> This makes me wonder why would a template author do something like
> {get_attr: [rg_a, rg_a_public_ip, 0]} when he can easily do

This is why: https://bugs.launchpad.net/heat/+bug/1341048
You can do things with 2014-10-16 that aren't possible with 2013-05-23.

> {get_attr: [rg_a, resource.0.rg_a_public_ip]} or {get_attr: [rg_a, resource.0, rg_a_public_ip]}
> for specific resource atrributes.

Yep, these are the only correct ways of doing this in 2014-10-16 and up, 
and the first is the only efficient way of doing it in 2013-05-23 (note: 
the second way works only in 2014-10-16 and up).

> I understand that {get_attr: [rg_a, rg_a_public_ip]} cane be useful when we just want to use
> the list of attributes.


- ZB

More information about the OpenStack-dev mailing list