You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Jinja2循环从Ansible facts中提取mount和size_total参数

问题解答

1. 数据类型说明

你拿到的hostvars[host]['ansible_facts']['mounts']返回值是字典列表,列表中的每一个元素都是对应单个挂载点属性的字典,你需要的mount(挂载路径)和size_total(总空间大小)都是字典的一级键,可直接访问。

2. 基础提取方法

如果需要遍历所有主机的所有挂载点提取对应参数,可直接用双层嵌套循环实现,示例模板如下:

{% for host in groups['test'] %}
### 主机 {{ host }} 挂载信息:
{% for mount_item in hostvars[host]['ansible_facts']['mounts'] %}
- 挂载路径:{{ mount_item.mount }},总空间:{{ mount_item.size_total | human_readable }}
{% endfor %}
{% endfor %}

3. 输出重复问题说明

你遇到的输出重复2次的原因是groups['test']分组下配置了2台主机,外层循环每遍历一台主机就会输出一次所有挂载点信息,最终就会出现2组重复的挂载数据。
如果你的需求是只保留唯一的挂载点信息(确认所有主机挂载配置一致的场景下),你自己提供的嵌套循环加列表去重的方案已经可以实现需求,另外如果需要区分不同主机的挂载数据,在输出时加上主机名标识即可避免重复混淆。

4. 优化方案参考

如果需要适配挂载点数量不固定的场景,避免固定写死slots[0]、slots[1]的硬编码问题,可以改用如下写法直接遍历去重后的列表:

{% set unique_mounts = [] %}
{% for host in groups['test'] %}
  {% for mount_item in hostvars[host]['ansible_facts']['mounts'] %}
    {% if mount_item.mount not in unique_mounts | map(attribute='mount') %}
      {{ unique_mounts.append(mount_item) }}
    {% endif %}
  {% endfor %}
{% endfor %}

{% for item in unique_mounts %}
Filesystem: {{ item.mount }}       Size: {{ item.size_total | human_readable }} / {{ (item.size_total - item.size_available) | human_readable }}
{% endfor %}

内容的提问来源于stack exchange,提问作者Irka Irenka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:27:01