访问过滤器的结果对象 fields/properties/items ansible 中的 oneliner

Access filter's resulting object fields/properties/items oneliner in ansible

例如有以下事件列表:

    - id: 11
      message: "Something happened yet again."
    - id: 10
      message: "Oh no, Something happened again."
    - id: 8
      message: "Something happened."

我想在一个 line/task 中提取最新的事件 ID。如果不使用中间任务将列表的第一个元素保存到变量,我还没有找到这样做的方法。这个解决方案看起来很笨重。

如何将字段名称与过滤器名称分开?有什么方法可以在 'first'、'last' 过滤器之后访问 field/property。 (return 词典的其他过滤器。)?

更新:

好吧,我的问题的措辞太混乱了。我只需要最新事件的 ID。 来自 Vladimir 的回答:

    "{{ list|map(attribute='id')|max }}" 

对我来说已经足够了。

更多,因为事件已经按 id(降序)排序:

    "{{ list|first()['id] }} 

会做。

因此,要在 ansible 中将过滤器名称与字段名称分开,只需要在过滤器名称后加上一对括号(我猜是因为它毕竟是一个 python 函数)。

问:"最近一次活动的id"

答:任务

- debug:
    msg: "{{ l|map(attribute='id')|max }}"

给予

  msg: '11'

除此之外,oneliner任务

- debug:
    msg: "{{ (l|items2dict(key_name='id', value_name='message'))[l|map(attribute='id')|max] }}"

给出最新id的消息

  msg: Something happened yet again.