我的盐堆柱子上有以下山药:
prometheus:
services:
cassandra:
enabled: False
cockroachdb:
enabled: True
haproxy:
enabled: True
swift:
enabled: False
我希望能够循环使用启用的服务列表。在
^{pr2}$但是,这不起作用,因为我尝试筛选的属性位于服务名称下面的嵌套词典中:
{'cassandra': {'enabled': False},
'cockroachdb': {'enabled': True},
'haproxy': {'enabled': True},
'swift': {'enabled': False}}
通过在循环中应用条件测试,我显然可以实现我想要的:
{% for name, properties in prometheus.services | dictsort %}
{% if properties.enabled %}
configuration for {{ name }}
{% endif %}
{% endfor %}
但是,我会经常循环这个列表,并希望Jinja在for循环中在线应用过滤器。在
有没有一种方法可以根据嵌套字典中某项的值进行筛选?在
嗯,我认为在这种情况下,yaml文件的结构越好,解决问题的选项就越多。在
我建议进行以下重组:
然后你可以用不同的方法迭代,这可能是一种方法:
{{ prometheus.services | selectattr('enabled', True) | map(attribute='name') | list }}
我希望这有帮助!在
无需更改支柱的结构,您可以通过
groupby
将列表分成两组。在它看起来有点复杂,但是如果您需要遍历这两个列表,它会很有用。在
相关问题 更多 >
编程相关推荐