访问过滤器的结果对象 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.
例如有以下事件列表:
- 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.