我有一个字典列表,我想得到最新的字典。
正在查看jinja2文档,看来我应该能够做到这一点:
- set_fact:
t:
- a: 1
b: 2
- a: 3
b: 1
- debug:
msg: "{{ t | max(attribute='a') }}"
但是失败了
致命:[localhost]:失败! => { “ msg”:“在({{t | max(attribute ='a')}})上发生了意外的模板类型错误:max()>获得了意外的关键字参数'attribute'” }
什么是最好的方式?当然,我的用例比那个小演示更难。 我的想法看起来像这样:
check_mode: no
set_fact:
tgs_info: "{{ tgs_info | default({}) | combine({ item: all_tg_info | to_json | from_json | json_query(query) | max(attribute='target_group_name') }) }}"
vars:
query: "target_groups[?contains(target_group_name, `{{ product }}`) == `true`] | [?ends_with(target_group_name, `{{ tg_suffix }}{{ item }}`) == `true`]"
loop: "{{ projects | selectattr('protocol', 'match', '^HTTP$') | map(attribute='port') | list }}"
想法是all_tg_info
包含我的AWS帐户的所有自动缩放比例。我过滤了它们,并希望根据名称或任何其他参数获取最新的。
我在这里很臭。
答案 0 :(得分:0)
正在查看jinja2文档,看来我应该能够做到这一点...
尽管jinja2 builtin filters documentation提到了max
过滤器的可能参数,但在可行的方面还是有一个open bug report支持这些参数。
在这种情况下,您可以使用json_query
filter轻松满足您的要求。这是一本演示手册,其中包含您的简单数据(因为我没有更详尽的数据……)。您可能可以将其调整为实际的json_query
。
---
- hosts: localhost
gather_facts: false
vars:
t:
- a: 1
b: 2
- a: 3
b: 1
tasks:
- debug:
msg: "{{ t | json_query('max_by(@, &a)') }}"