按键存在过滤Jinja列表

时间:2017-05-19 22:13:24

标签: ansible jinja2

我正在Jinja写一个Ansible模板,它有以下模式:

# Inventory
[Group1]
vm1 cluster=clusterName

[Group2]
vm2

请注意,第二组没有定义属性cluster

# Task Definition
vars:
  potential_seeds: "{{groups.all | map('extract', hostvars) | groupby('cluster') | list}}"

这当然会导致明显的错误:

"the field 'vars' has an invalid value, which appears to include a variable that is undefined. The error was: 'dict object' has no attribute 'cluster'

我需要对列表进行过滤,以便只对已定义<{1}} 的词典进行分组。

1 个答案:

答案 0 :(得分:5)

您可以在groupby之前使用selectattr

groups.all | 
  map('extract', hostvars) |
  selectattr('cluster','defined') |
  groupby('cluster') |
  list

这将仅选择在分组前定义cluster属性的元素。