[openstack-dev] [heat][yaql] Deep merge map of lists?

Thomas Herve therve at redhat.com
Mon Aug 29 05:07:09 UTC 2016


On Sun, Aug 28, 2016 at 11:58 PM, Steven Hardy <shardy at redhat.com> wrote:
> Hi all,
>
> I have a need to merge a list of maps of lists:
>
> heat_template_version: 2016-10-14
>
> outputs:
>   debug:
>     value:
>       yaql:
>         # dict(vms=>dict($.vms.select([$.name, $])))
>         expression: dict($.data.l.select([$.keys().toList()[0],
> $.values().toList()[0]]))
>         data:
>           l:
>             - a: [123]
>             - b: [123]
>             - a: [456]
>
>
>
> I want to end up with debug as:
>
>   a: [123, 456]
>   b: [123]
>
> Perhaps we need a map_deep_merge function, but can this be done with yaql?
>
> I suspect it can, but can't currently figure out how the assignment to the
> intermediate "a" value is supposed to work, any ideas on the cleanest
> approach appreciated!

I believe you don't need the intermediate value, and can rely on what
you'd do in Python with setdefault:

dict($.groupBy($.keys().toList()[0], $.values().toList()[0][0]))

ought to work, I believe?

-- 
Thomas



More information about the OpenStack-dev mailing list