如何用Jinja过滤语句列出Ansible中内存高于平均值的主机
单行Jinja实现方案
你可以直接使用以下语句,直接返回内存高于所有主机平均值的主机名列表:
{{ groups['all'] | select('extract', hostvars, 'ansible_memory_mb.real.total') | select('gt', (groups['all'] | map('extract', hostvars, ['ansible_memory_mb', 'real', 'total']) | list | avg)) | list }}
语句逻辑拆分
- 嵌套在内层括号的部分负责计算所有主机的内存平均值:
- 遍历
groups['all']下的所有主机 - 通过
map过滤器配合extract提取每台主机的ansible_memory_mb.real.total属性值 - 转为列表后调用
avg过滤器计算出全局内存平均值
- 遍历
- 外层逻辑负责筛选符合条件的主机:
- 遍历所有主机提取对应内存属性
- 调用
select过滤器匹配内存值大于平均值的主机 - 最后输出符合条件的主机名列表
如果你的Ansible版本低于2.10,不支持gt简写,替换为greaterthan即可正常使用。
内容的提问来源于stack exchange,提问作者Mikhail T.
相关产品推荐
相关产品推荐

