我正在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}} 的词典进行分组。
答案 0 :(得分:5)
您可以在groupby
之前使用selectattr
:
groups.all |
map('extract', hostvars) |
selectattr('cluster','defined') |
groupby('cluster') |
list
这将仅选择在分组前定义cluster
属性的元素。