[openstack-dev] [heat][yaql] Heat map replacement options
Zane Bitter
zbitter at redhat.com
Wed Jul 20 14:32:04 UTC 2016
On 19/07/16 11:04, Steven Hardy wrote:
> On Fri, Jul 15, 2016 at 10:25:39AM +0100, Steven Hardy wrote:
>> Hi all,
>>
>> I'm trying to figure out the cleanest way to do a replacement of values in
>> a mapping (json parameter) in a heat template, e.g:
>>
>> ServiceNetMap:
>> type: json
>> default:
>> IronicApiNetwork: internal_api
>> CephPublicNetwork: storage
>>
>> NetIpMap:
>> type: json
>> default:
>> storage: 192.0.2.2
>> internal_api: 192.0.2.5
>>
>> How do I get
>> OutputMap:
>> IronicApiNetwork: 192.0.2.5
>> CephPublicNetwork: 192.0.2.2
>>
>> It seems like something yaql should be able to do, but I've so far failed
>> to figure out the syntax.
>>
>> The other (possibly simpler) possibility is to implement a new hot
>> function, e.g something like:
>>
>> map_replace:
>> template: {get_param: ServiceNetMap}
>> value_replacements: {get_param: NetIpMap}
>
> As a follow-up to this, I have posted this spec and implementation for
> map_replace (syntax differs slightly from the keys above):
>
> https://review.openstack.org/#/c/343696/
>
> https://review.openstack.org/#/c/343731/
>
> My aim is a simpler interface to the yaql example previously discussed, and
> a better error path when things like key collisions occur. Reviews welcome! :)
This all merged in super-quick time before I even had the chance to
look, but I was wondering... is there really any difference between this
and str_replace?
Right now str_replace requires the template to be a string, but I can't
see any reason for that to be the case. Why not just relax that
requirement so the user can pass map or a list and any strings in the
values/items will get (recursively) replaced by values from the params?
That'd be simpler than adding a separate function, and more flexible too
since you can replace parts of values not just the whole thing (and it
would also handle lists and nested data). The map_replace is very tied
to this one particular use case, where the input is a map and the things
you want to replace are top-level values in their entirety.
Just a thought.
cheers,
Zane.
More information about the OpenStack-dev
mailing list